.htaccess重写规则重写301重定向

时间:2011-01-27 14:35:58

标签: .htaccess

我的.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编写特定的重写规则(没有一个工作正常) )。

我确定我错过了一些东西。欢呼声。

2 个答案:

答案 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]