在我的 .htaccess 文件中,每当我创建 301 重定向时,重定向的 URL 都会附加到要重定向到的 URL 中。例如:
Redirect /linksresources.html http://example.com/resources/
将重定向至:
http://example.com/resources/?/linksresources.html
现有的.htaccess 文件:
#404 Custom Error page
#ErrorDocument 404 /error_docs/404.php
#force IE out of compatibility mode
<FilesMatch "\.(htm|html|php)$">
<IfModule mod_headers.c>
BrowserMatch MSIE ie
Header set X-UA-Compatible "IE=Edge,chrome=1"
</IfModule>
</FilesMatch>
#Disable Indexing
Options -Indexes
Order Deny,Allow
Allow from All
Redirect /linksresources.html http://example.com/resources/
RewriteEngine On
RewriteOptions inherit
#if request is not an existing file or directory then redirect to
#codeigniter boot.php file
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ boot.php?/$1 [L,QSA]
我觉得我以前解决过这个问题,但我记不清当时是怎么解决的。有人有什么建议吗?
答案1
这是由于与正在执行的 mod_rewrite 指令发生冲突而导致的前mod_aliasRedirect
指令,尽管配置文件中的顺序看起来是这样的。不同的模块在请求期间执行的时间不同。因此,不建议混合使用来自两个模块的重定向。
具体来说,由于 可能不存在物理文件,因此RewriteRule
触发了现有 ,并且正在内部重写为。然后,mod_alias触发,与匹配/linksresource.html
boot.php?/linksresource.html
Redirect
/linksresource.html
原始请求并重定向到http://example.com/resources/?/linksresources.html
- 从重写的请求中传递查询字符串。
由于您已经在使用 mod_rewrite ,因此您应该将 mod_alias 更改Redirect
为等效的 mod_rewrite RewriteRule
:
RewriteRule ^linksresources\.html$ http://example.com/resources/ [R=302,L]