mod_rewrite不重写url

时间:2012-03-05 22:32:43

标签: mod-rewrite

这样的事情似乎不起作用的原因是什么:

php文件:display.php(这是一个空文件)

.htaccess具有以下内容:

RewriteEngine on
RewriteRule ^/?([a-zA-Z_]+)/([a-zA-Z_]+)/([a-zA-Z_]+)$ display.php?country=$1&state=$2&city=$3 [L]

当我尝试:

http://somewebsite.com/display.php?country=USA&state=Minnesota&city=Minneapolis

它不会重写为

http://somewebsite.com/USA/Minnesota/Minneapolis

为什么?

谢谢!

2 个答案:

答案 0 :(得分:1)

如果您正尝试重写:

http://somewebsite.com/display.php?country=USA&state=Minnesota&city=Minneapolis

为:

http://somewebsite.com/USA/Minnesota/Minneapolis

然后你的重写规则是倒退的 - the format for RewriteRule lines是:

RewriteRule <pattern to match> <substitution>

因此,您希望模式匹配以引用/display.php...并将替换作为新URI /country/state/city。此外,您需要使用RewriteCond条件来匹配查询字符串。你的规则需要看起来像这样:

RewriteEngine on
RewriteCond %{QUERY_STRING} ^country=([a-zA-Z]+)&state=([a-zA-Z]+)&city=([a-zA-Z]+)$
RewriteRule ^/display.php$ /%1/%2/%3? [R]

(注意?末尾的尾随RewriteRule - 这表示应删除查询字符串。如果没有尾随?,则会重复查询字符串。)

答案 1 :(得分:0)

您可能在目标网址中缺少正斜杠。