【发布时间】:2014-01-09 17:03:42
【问题描述】:
示例代码
这是我的.htaccess 文件的示例:
RewriteEngine On
RewriteRule ^home/?$ index.php?intro=true [L]
RewriteRule ^home/([^/]*)$ index.php?location=$1&intro=true [L]
RewriteRule ^wedding/?$ wedding.php [L]
RewriteRule ^wedding/([^/]*)$ wedding.php?location=$1 [L]
下面是index.php 和wedding.php 页面上的一些示例代码:
index.php:
if(!$_GET["location"]) { $location = "London"; } else { $location = ucwords($_GET["location"]); }
[....]
<h1>Ben Pearl, <?php echo $location; ?> Magician</h1>
wedding.php:
if(!$_GET["location"]) { $location = "London"; } else { $location = ucwords($_GET["location"]); }
....
<h1><?php echo $location; ?> Wedding Magician</h1>
应该发生什么
$location 字符串应受$_GET 值“location”的影响。
发生了什么
重写在index.php 上运行良好;如果用户访问 example.com/home/place,$location 将替换为 place。
但是,在每隔一个页面(包括上面粘贴了脚本的页面)上,字符串都被替换为“london”,这意味着该页面没有收到$_GET 数据并且重写规则无法正常工作。
奇怪的是,完全相同的代码在我的localhost 上运行良好。
【问题讨论】:
-
为了百分百确定,您是否尝试过在脚本顶部使用
var_dump($_GET)来查看$_GET数组中的确切内容?然后你可以肯定地说位置键不存在 -
是的。我把它放在任何 HTML 之前,它返回了
array(0) { };在主页上我看到array(2) { ["location"]=> string(6) "place" ["intro"]=> string(4) "true" } -
您可以发布一个无效的网址/路径(
/wedding/...)吗? -
是的,我在上面发布了(
array(0) { })(抱歉,不清楚!)
标签: php apache .htaccess mod-rewrite url-rewriting