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]