2012-10-07 81 views
2

這更像是一個跟進的問題這一個: .htaccess - how to force "www." in a generic way?合併幾個現代重寫規則

我有這樣的規則:

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

而且我想與提供者將它們合併在那個答案:

RewriteCond %{HTTP_HOST} !^$ 
RewriteCond %{HTTP_HOST} !^www\. [NC] 
RewriteCond %{HTTPS}s ^on(s)| 
RewriteRule^http%1://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L] 

這些是正確的結果(正確的順序和規則)?

<IfModule mod_rewrite.c> 
RewriteEngine On 
RewriteCond %{HTTP_HOST} !^$ 
RewriteCond %{HTTP_HOST} !^www\. [NC] 
RewriteCond %{HTTPS}s ^on(s)| 
RewriteRule^http%1://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L] 
RewriteBase/
RewriteRule ^index\.php$ - [L] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule . /index.php [L] 
</IfModule> 

到目前爲止一切正常,但我所有的測試,其中在一個臨時URL進行,而不是實際的域。

謝謝!

回答

1

這些規則應該做你想找的東西,但我會微調它。由於你有什麼作品,這只是基於我的偏好建議。 :)

<IfModule mod_rewrite.c> 
RewriteEngine On 
RewriteBase/

RewriteCond %{HTTP_HOST} !^$ 
RewriteCond %{HTTP_HOST} !^www\. [NC] 
RewriteCond %{HTTPS}s ^on(s)| 
RewriteRule^http%1://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L] 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule . /index.php/$1 [L] 
</IfModule> 

我發現,當不是規則的所有重寫選項先來時,它更容易閱讀。我還想添加空白行,以便更容易地看到一組規則結束和下一個開始。

此規則是不必要的:RewriteRule ^index\.php$ - [L],因爲下一個規則只會影響未映射到真實文件的URI的請求。由於index.php存在於文件系統中,因此它不會觸發下一個規則。

對於index.php規則,添加/ $ 1使請求在$ _SERVER ['PATH_INFO']中可用,這可能會有所幫助,具體取決於您的代碼編寫方式。這絕對不是必需的,但對於像WordPress或CodeIgniter這樣的應用程序來說,這種方法很常見,所以我認爲這是值得一提的。

+0

謝謝...看起來更清潔,似乎工作。 –