我很难弄清楚为什么我的重写规则在线完美运行(网站启动并运行),但是当我尝试在我的Mac上运行本地副本时失败。我没有使用MAMP o LAMP,我手动安装了apache和php。 Apache是2.2.26,php是5.4.20。
我的.htaccess文件中有更多规则,但我关注的是这两个:
RewriteRule ^category/([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)/?$ category.php?slug=$1&page=$2 [L]
RewriteRule ^category/([a-zA-Z0-9_-]+)/?$ category.php?slug=$1 [L]
基本上变量没有传递给php文件。除此之外,下面的规则完全正常!即使在我的本地设置中,我也看不出任何差异,除了我有两个以&#34开头的规则; ^ category /"
RewriteRule ^project/([a-zA-Z0-9_-]+)/?$ project.php?slug=$1 [L]
为什么这可以在线工作(ubuntu)但在本地失败?
答案 0 :(得分:1)
我猜你打开了多视图。这会导致mod_negotiation模糊匹配对文件路径资源的请求。因此,当它看到/category/something
并看到文件category.php
时,它会将请求权限发送到php文件(在本例中为ala PATHINFO),从而完全绕过mod_rewrite。
尝试关闭多视图:
Options -Multiviews