我正在尝试使用 Apache 的 mod_rewrite 来创建更好的 URL。我将所有内容重定向到单个 index.php 页面,解析 $_SERVER['REQUEST_URI'] 然后包含适当的页面。
RewriteRule 的代码如下:
Options +FollowSymLinks
RewriteEngine on
RewriteRule \b.*\b index.php
我做了一个 url 类来处理 url 操作,里面有这个函数来获取 URL:
public function get_url(){
$url = strtolower($_SERVER['REQUEST_URI']);
$url = explode("/", $url);
array_shift($url);
print_r($url);
return $url;
}
它可以工作,但是有一个问题:当有 / 字符时,explode 函数会导致最后一个数组索引为空,这让我很困扰,并且在包含正确的页面时使事情变得更加复杂。这应该很容易解决,进行一些廉价的操作,例如:
$url = trim(str_replace(" ", "/", $url));
$url = explode(" ", $url);
但是,每当我尝试以除上面所写之外的任何方式更改 $url 变量(它是 $_SERVER['REQUEST_URI'] 的副本)时,都会收到此错误:
页面未正确重定向
Firefox 检测到服务器正在以永远不会完成的方式重定向对该地址的请求。
此问题有时可能是由禁用或拒绝接受 cookie 引起的。
我的猜测是 $_SERVER['REQUEST_URI'] 以某种方式通过引用传递,当我尝试操作字符串时,Apache 服务器找不到匹配项并且变得很糟糕,但我不知道为什么会发生这种情况(或者为什么用 / 分隔符爆炸是可以的,但将 / 字符更改为空格然后爆炸不是),或者更重要的是,如何修复它。