2011-01-27 182 views
2

我的.htaccess重定向有问题。我同时拥有重写规则删除从我的网址(我使用PHP框架),并301重定向从旧网页重定向“的index.php /?”:.htaccess重写规则重写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的内容文件(它什么都不做),在重写之后将重写设置为“关闭”(这将停止301的工作),并为每个301编写特定的重写规则(其中任何一个都不起作用)。

我确定我错过了一些东西。干杯。

+0

我想,以确定是否在底部回答了你自己的问题在这里。是这样吗?你应该在下面回答你的问题,并且单独留下你的问题的内容,以便人们不认为你仍然需要帮助。 – 2011-01-27 16:29:31

回答

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$) 

这也可能exluce在.PHP或.html结尾的网址,这意味着重写韩元没有用,你的框架将会崩溃,但只要你远离它,你应该没问题。

0

您的问题是,该行:RewriteRule ^(.*)$ /index.php?/$1 [L]在该重写中强制查询参数。有些主机是以这种方式设置的,我特别知道的是DreamHost。所以,任何被重定向的东西都会被打破。

你可以试试这个

RewriteRule ^dir/file.php$ http://webpage/newdir/file2.php [R=301,L]