2012-06-01 25 views
0

這是一個常見問題,對此有許多常見的答案,但是我有一個不起作用的特定小細節,閱讀文檔並不能幫助我理解原因。爲什麼RewriteRule只適用於不存在的文件?

所以,這裏是問題:我想從域名中刪除www.。我用mod_rewrite使用.htaccess。下面是代碼:

RewriteEngine on 
RewriteCond %{HTTP_HOST} ^www\.swedish\-cloud\.com$ 
RewriteRule ^(.*)$ "http\:\/\/swedish\-cloud\.com\/$1" [R=301,L] 

它的工作原理,如果我只需鍵入http://www.swedish-cloud.com。它將其更改爲http://swedish-cloud.com

但如果我輸入,例如:http://www.swedish-cloud.com/index.html,它更改URL,以http://swedish-cloud.com/index.html

但是,如果我輸入一個不存在的文件的路徑,像http://www.swedish-cloud.com/index2.html,它的URL更改爲http://swedish-cloud.com/index2.html顯示404未找到錯誤。

你能讓我明白我失蹤的是什麼嗎?謝謝。

PS:我沒有對服務器的根訪問權限。

回答

1

讓我們給你正確的答案。您的cond語法是錯誤的,但不是很重要,規則的語法也是錯誤的。嘗試:

RewriteCond %{HTTP_HOST} =www.swedish-cloud.com 
RewriteRule ^.*   http://swedish-cloud.com/$0 [R=301,L] 

使用相等運算符的COND如果這是要你想做的事,然後你不需要逃避匹配字符串。

替換字符串不需要引號或轉義符,並且既然您想要整個URI,爲什麼不使用$ 0(整個匹配模式)。

+0

我已更改爲您建議的代碼,但仍不起作用。 http://www.swedish-cloud.com/index.html不會更改爲http://swedish-cloud.com/index.html只有當它是http://www.swedish-cloud.com/時,它纔會更改到http://swedish-cloud.com但我不說你的代碼不起作用。我在另一臺Linux服務器上嘗試了它,它工作。似乎在這個特定的服務器上通配符被禁用。 –

0

您看到的404錯誤是一個標準錯誤。 重寫原因對www.example.com/something.html不起作用,因爲它與正則表達式不匹配,因爲您有行結束符。 swedish-cloud.com $後的$。這意味着www.swedish-cloud.com將被重寫,因爲你已經基本上終止了正則表達式。

嘗試:

RewriteCond %{HTTP_HOST} ^www.example\.com 
RewriteRule ^(.*)$ http://example.com/$1 [R=301,L] 
+0

我已經改變了它RewriteEngine敘述上 的RewriteCond%{HTTP_HOST}^WWW \ .swedish \ -cloud \ .COM 重寫規則^(。*)$「HTTP \:\/\ /瑞典\ -cloud \ .COM \/$ 1「[R = 301,L]但仍無效。 http:// www.swedish-cloud.com/index.html不重定向到http:// swedish-cloud.com/index.html –

+0

我發現這個問題是由於配置中的一些設置而發生的服務器,我不能改變,因爲我沒有根評估。在其他Linux服務器上使用相同的代碼可以完成這項工作。我猜想當前服務器上禁用了WildCard重定向。不管怎麼說,還是要謝謝你! –

相關問題