2015-11-15 44 views
3

我正在寫一個WWW到非www重定向用下面的代碼:WWW到非www重定向將不起作用

RewriteEngine On 
RewriteBase/
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC] 
RewriteRule ^(.*)$ http://%1/$1 [R=301,L] 

然而,www.mywebsite.com重定向到mywebsite.com/www/而不是mywebsite.com

我懷疑這可能是由於VirtualHost的DocumentRoot配置造成的,但由於我處於共享環境中,所以無法訪問httpd.conf文件。

任何想法?

+1

請求的完整URL是什麼?這個.htaccess文件大概在文檔根目錄下? – MrWhite

+0

規則應該按原樣運行。所描述的行爲只有在您請求「http:// www.mywebsite.com/www」時纔會發生。最有可能的是,你的配置中還有更多。 –

+0

@ w3d:完整的URL是'http:// www.mywebsite.com'。謝謝 – Matthew

回答

1

由於奧拉夫在評論中建議,通常這不應該發生。然而,也出現了這樣的一些問題,其中託管帳戶(在共享環境中)在某種程度上依賴於配置並啓用mod_rewrite的繼承解決此問題:

RewriteOptions Inherit 

誠然,如何或爲何這工作應該有點神祕。 (特別是由於上級指令執行後孩子指令,等等?)

您也可以嘗試改變你的RewriteRule使用的REQUEST_URI值代替,例如:

RewriteRule^http://%1%{REQUEST_URI} [R=302,L] 

更改爲301時你確定它工作正常。永久重定向自然會被瀏覽器緩存,因此可能會使測試變得棘手。 (另外,在測試之前清除瀏覽器緩存!)

+0

感謝您的回答。根據你的建議進一步調查,我發現RewriteRule的狀況正在造成麻煩。使用'RewriteRule^http://%1/$ 1 [R = 302]'或者'RewriteRule^http://%1%{REQUEST_URI} [R = 302]',事情可以正常工作,儘管'www.mywebsite .com /東西'不會重定向到'mywebsite.com/something'。 – Matthew

+0

需要注意的是,如果你使用的是模式'^',那麼'RewriteRule^http://%1/$ 1 [R = 302]'不會**工作,它需要是帶有'REQUEST_URI'的第二個指令。 '。第一條指令會簡單地去掉URL路徑,所以不需要「www」 - 但是沒有_anything_!!然而,你是說第二個人不能工作......你還在失去「東西」嗎?順便提一句,你應該使用'L'標誌(如果你有其他指令)。 – MrWhite

+0

你的.htaccess文件中是否有其他指令? – MrWhite