2012-02-10 79 views
0

我在我的.htaccess文件中使用了其他mod_rewrite條件,並且還希望確保我的域總是以www爲前綴(用於會話存儲和seo)。然而,如果我去example.com,使用我目前的.htaccess,它可以很好地工作,但是如果我訪問example.com/folder,它將重定向到www.example.com(留下/文件夾)是否有我做錯的事這裏?mod_rewrite強制www前綴選擇性工作

我的.htaccess文件

Options +FollowSymLinks 
RewriteEngine on 

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

# Rules for: actions 
RewriteRule ^([-_!~*'()$a-zA-Z0-9]+)/?$ ./date/index.php?action=$1 [L,QSA] 
+0

你有沒有嘗試刪除的操作規則看如果這是問題? – Tiggerito 2012-02-10 10:49:42

+0

請嘗試清除您的瀏覽器緩存。可能是一些舊的重定向代碼仍然被緩存。 – Gerben 2012-02-10 20:10:43

回答

1

重寫引擎是多道。它循環選取路徑中最低的.htaccess文件與RewriteEngine On,直到不再發生重寫更改。因此,對於這個example.com/folder/xxx要求 - 如果一個.htaccess文件DOCROOT/folder存在,那麼它將被用於和DOCROOT/.htaccess重寫規則將忽略

您可以在DOCROOT或層次結構中使用單個.htaccess。單個DOCROOT .htaccess文件具有較小的性能優勢,因爲引擎只需打開並讀取一個文件即可。我在這篇文章中更詳細地描述了這一點,More on using Rewrite rules in .htaccess files

你沒有指定RewriteBase,所以引擎經常會丟失目錄,就像你的情況一樣。所以我會用在DOCROOT/.htaccess如下:

Options +FollowSymLinks 
RewriteEngine on 
RewriteBase /
RewriteCond %{HTTP_HOST}  =example.com 
RewriteRule ^.*     http://www.example.com/$0 [R=301,L] 

其中DOCROOT是Apache文檔根目錄。

我也很好奇你的包含字符集的日期模式。似乎很奇怪我的,但離開這個不談,它的更好寫成

RewriteRule ^([-_!~*'()$\w]+)/?$ date/index.php?action=$1 [L,QSA] 

假設,當然,前提是你要激活DOCROOT /日期/ index.php文件

+0

很好,謝謝。 – 2012-02-11 07:46:16