2012-10-29 116 views
1

我們有一個重寫規則,看起來像這樣:HTACCES國防部重寫,堆放規則

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-l 
RewriteRule (?!^(cms|images|js|mobile)(/.*|)$)^.*$ page.php [NC,L] 

預期其中一期工程;如果該文件不存在,則轉發到page.php這是一個通用頁面,並允許使用自定義URL的頁面。

我們也想強制www。先於域名:example.com - > www.example.com

爲此,我們使用:

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

這也適用,但是當兩個應該一起工作:

example.com/non-existent-file 

我們最終得到:

www.example.bom/page.php 

默認爲我們的404頁。我如何修改這些規則以協同工作?我曾試着玩過一些不同的足球角色(即去除[NC,L]中的L,以試圖讓兩個規則得到處理)。

我也試過重複轉到page.php行下的www重定向(並刪除L後綴)沒有成功。

整個的.htaccess文件看起來像:

Options +FollowSymLinks 
RewriteEngine On 
RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-l 
RewriteRule (?!^(cms|images|js|mobile)(/.*|)$)^.*$ page.php [NC,L] 

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

此外,有沒有一個%{常數衝我來代替example.com的表示當前域使用?

回答

1

您正在尋找的常數%{HTTP_HOST}由HTTP請求提供。也許你正在尋找變量%{SERVER_NAME}作爲虛擬主機的默認服務器名稱?

將主機名檢查規則第一,並在page.php規則中使用RewriteCond只有當域已經是正確適用:

RewriteEngine On 
# First rewrite the domain 
RewriteCond %{HTTP_HOST} ^example\.com$ 
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L] 

# Then rewrite the files 
# At this point, the domain should already have been enforced 
RewriteCond %{HTTP_HOST} ^www\.example\.com$ 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-l 
RewriteRule (?!^(cms|images|js|mobile)(/.*|)$)^.*$ page.php [NC,L] 
+0

曾爲完美,謝謝! – AVProgrammer