mod-rewrite question。
为什么以下代码
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^search/(.*)$ http://www.example.com/forms/index.php?i=$1 [QSA,L]
导致网址从
更改http://www.example.com/search/foo/bar
到
http://www.example.com/forms/index.php?i=foo/bar
而以下代码:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^search/(.*)$ /forms/index.php [L]
不会更改输入网址?
有什么见解?
感谢。
答案 0 :(得分:1)
因为当你有http://www.example.com
,mod_rewrite 隐含重定向时,它与将R
放在规则标志中相同。
在mod_rewrite documentation的“替换字符串”下,它说:
绝对网址
如果指定了绝对URL,mod_rewrite将检查主机名是否与当前主机匹配。如果是,则删除方案和主机名,并将生成的路径视为URL路径。否则,将对给定的URL执行外部重定向。要强制外部重定向回到当前主机,请参阅下面的[R]标志。