我的.htaccess重定向有问题。我有一个重写规则从我的URL中删除“index.php?/”(我正在使用PHP框架),还有301重定向从旧页重定向:
# START THE REWRITE
RewriteEngine on
Options -Indexes
Options +FollowSymLinks
RewriteCond $1 !^(index\.php|assets)
RewriteRule ^(.*)$ /index.php?/$1 [L]
# 301 REDIRECTS
Redirect 301 /oldpage.html http://www.example.com/old_page
Redirect 301 /page.html http://www.example.com/page
Redirect 301 /page-that-no-longer-exists.html http://www.example.com/
我无法使用其他重写规则重命名我的.html文件,因为有些页面与新页面不匹配,而其他一些.html页面正在重定向到主页 - 因此301重定向。
因此,由于重写规则,第一个301重定向将指向
http://www.example.com/old_page?/old_page.html
而不是
http://www.example.com/old_page
我尝试重新排序.htaccess文件的内容(什么都不做),在重写后设置重写为“off”(停止301的工作)并为每个301编写特定的重写规则(没有一个工作正常) )。
我确定我错过了一些东西。欢呼声。
答案 0 :(得分:1)
好的,我想出了几个解决方案。
第一种是将示例中的重定向发送到
Redirect 301 /oldpage.html http://www.example.com/index.php?/old_page
这不适用于删除“index.php?”的重写,但确实有效。
第二种方法是编辑重写条件以排除任何.php或.html文件:
RewriteCond $1 !^([a-zA-Z1-9\-\_/]*\.php$|assets|[a-zA-Z1-9\-\_/]*\.html$)
这也可能会删除任何以.php或.html结尾的网址,这意味着重写将无效,并且您的框架将会中断,但只要您远离它,您就应该没问题。
答案 1 :(得分:0)
您的问题是这一行:RewriteRule ^(.*)$ /index.php?/$1 [L]
在该重写中强制执行查询参数。有些主机是这样设置的,我特别知道的是DreamHost。因此,重定向的任何内容都会出现故障。
你可以试试这个
RewriteRule ^dir/file.php$ http://webpage/newdir/file2.php [R=301,L]