我在使用htaccess设置单页重定向时遇到了一些问题。目前我有一个htaccess文件:
RewriteCond %{SCRIPT_FILENAME} !-s
RewriteRule (.*) index.php?path=$1 [QSA,L]
然后是一组重定向,例如
Redirect 301 /oldpage.htm http://www.mydomain.com/new-page
但我遇到的问题是,当我进入浏览器并输入旧URL时,我会被重定向到附带参数的URL,例如:
" HTTP://www.mydomain.com/new-page路径= oldpage.htm"
对于我的一些重定向,这似乎无论如何都会起作用,对于某些重定向会产生404错误。我也尝试过使用RewriteCond和Rewrite Rule为那些我可以写的页面编写更多通用的catch重定向,并且我遇到了同样的问题。
我认为其他一些规则必须干扰我的重定向 - 我能看到的唯一一个可能会这样做的是上面的规则,但如果是这样的话,我不应该使用URL重定向到最终
" HTTP://www.mydomain.com/index.php路径= oldpage.htm"
任何人都可以解释为什么参数会被附加到网址以及我如何阻止这种情况发生,以便重定向工作?
干杯!
答案 0 :(得分:0)
因为你的1美元重写规则
RewriteRule(。*)index.php [QSA,L]试试这个
答案 1 :(得分:0)
这是因为mod_alias(Redirect
指令)和mod_rewrite(Rewrite*
指令)都应用于URL文件映射处理管道中的同一URI。为了防止这种情况发生,在这种情况下你需要坚持使用其中一种。
您还希望首先应用重定向:
RewriteRule ^/?oldpage.htm$ http://www.mydomain.com/new-page [L,R=301]
RewriteCond %{SCRIPT_FILENAME} !-s
RewriteRule (.*) index.php?path=$1 [QSA,L]
你的index.php
规则将捕获所有不是符号链接的CGI脚本的请求,所以,如果真的是你的意图,几乎所有的一切。否则,您可以通过包括以下内容来保护合法请求:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
高于最后一条规则。