2016-09-19 55 views
0

我設置重寫規則,以引導domain.com流量時子目錄:的Apache的.htaccess重寫規則不包括使用以下規則來<code>www.domain.com</code>重定向非www到www網址

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

從我有限的瞭解,在RewriteRule中的$1應匹配domain.com/之後的任何內容,然後將其放在我重寫的網址www.domain.com/的末尾。

例如domain.com/abc應該變成www.domain.com/abc

但是,這是不起作用。如果我瀏覽到domain.com/abc那麼這條路是不是在所有的改寫,我只是得到domain.com/abc沒有www

我已經做了很多的閱讀,只是想弄清楚$1應該照顧這個,從我的理解。

誰能解釋爲什麼它不工作,我懷疑它應該是什麼?謝謝。

+1

這意味着這條規則是不執行的。註釋掉'IfModule'行並重新測試。 – anubhava

+0

它也將取決於您指定的上下文。如果你的請求不符合你指定的虛擬主機,它也不會影響它,等等。然而,這是一種非常複雜的做法,在虛擬主機中指定正確的'ServerName',並設置指令'UseCanonicalName on '在虛擬主機中應該已經足夠了。 –

+0

這是工作,除了'$ 1'。正如之前我設定這個規則我沒有得到來自'domain.com'重定向,一旦我設定這個規則我重定向到'www.domain.com'。然而,子目錄不起作用,這是混淆的地方。 – jamesmarkcook

回答

0

事實證明,因爲我使用Wordpress和W3 Cache插件,我只是把代碼放在我的.htaccess文件的錯誤位置。

代碼應該放在# BEGIN Wordpress代碼塊中,並且在Wordpress已經存在的現有規則之前。

現有的代碼應該是這個樣子:

# BEGIN Wordpress 
<IfModule mod_rewrite.c> 
RewriteEngine On 
RewriteBase/
RewriteRule ^index\.php$ - [L] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule . /index.php [L] 
</IfModule> 
#END Wordpress 

我說我原來的代碼,這個如下:

# BEGIN Wordpress 
<IfModule mod_rewrite.c> 
RewriteEngine On 
RewriteBase/
RewriteCond %{HTTP_HOST} !^www\. [NC] 
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L] 

RewriteBase/
RewriteRule ^index\.php$ - [L] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule . /index.php [L] 
</IfModule> 
#END Wordpress 

這解決我上面所描述的問題。感謝評論員激發我的思考過程。

相關問題