2013-04-30 134 views
1

我有一個託管在其上的多個域的共享主機。在我的主機的根文件夾中存在一個.htaccess(比如說是htaccess1)。在HT1代碼:多個.htaccess文件互相沖突

RewriteEngine on 
RewriteCond %{HTTP_HOST} ^(www.)?mydomain.com$ [NC] 
RewriteCond %{REQUEST_URI} !^/mydomain/ 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ /mydomain/$1 
RewriteCond %{HTTP_HOST} ^(www.)?mydomain.com$ [NC] 
RewriteRule ^(/)?$ mydomain/index.php [L] 

這些規則存在,只有擁有www.mydomain.com所使用的網址mydomain文件夾中的所有文件。我是新的URL重寫,所以我不明白每行的意義。另一個.htaccess(如htaccess2)文件存在於mydomain文件夾中。代碼是htaccess2是:

RewriteEngine On 
RewriteCond %{HTTP_HOST} !^www\. 
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^([0-9]+)?/$ try.php?id=$1 
RewriteRule ^([0-9]+)?$ try.php?id=$1 
RewriteRule ^post/([0-9]+)?/$ post.php?id=$1 
RewriteRule ^post/([0-9]+)?$ post.php?id=$1 

在這個文件中,行6,7工作正常,並重定向與數值參數要求try.php但線8,9不工作,給一個404頁沒有發現錯誤,確切的錯誤字符串是:

在此服務器上找不到請求的URL/mydomain/post/1233445。

我懷疑htaccess1的某些作用是否造成這個問題,因爲我在第8,9行嘗試了許多正則表達式的變體。請幫忙。

+0

'RewriteCond'按照第一個'RewriteRule'工作,除非您使用類似skip的跳過來跳過失敗的匹配。 – 2013-04-30 18:40:33

回答

2

主要的.htaccess:

Options +FollowSymLinks -MultiViews 
RewriteEngine on 
RewriteBase/

RewriteCond %{HTTP_HOST} ^(www\.)?mydomain\.com$ [NC] 
RewriteCond %{REQUEST_URI} !^/mydomain/ 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ /mydomain/$1 [L] 

RewriteCond %{HTTP_HOST} ^(www\.)?mydomain\.com$ [NC] 
RewriteRule ^$ /mydomain/index.php [L] 

變化:

  1. 添加RewriteBase在頂部。
  2. 添加了L標誌標記它的最後一個規則。
  3. 添加了必要的選項。

MYDOMAIN的.htaccess:

Options +FollowSymLinks -MultiViews 
RewriteEngine on 
RewriteBase /mydomain/ 

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

RewriteRule ^post/([0-9]+)/?$ post.php?id=$1 [L,QSA,NC] 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^([0-9]+)/?$ try.php?id=$1 [L,QSA] 

變化:

  1. 添加RewriteBase在頂部。
  2. 增加了L標記來標記它的最後一個規則。
  3. 刪除了冗餘規則。
  4. 將特定規則移到通用規則上方。
  5. 添加了必要的選項。
+0

你能詳細闡述一下你做了哪些改變? – Sourabh 2013-04-30 18:45:02

+0

@Sourabh:我一定會這樣做,但我建議你嘗試一下這些變化,並告訴我它是否有效,我會相應地提供一個簡要的解釋。 – anubhava 2013-04-30 18:48:28

+0

不,它不。另外,當我刪除了最後2行的基礎htaccess時,它開始發出403禁止請求錯誤。 – Sourabh 2013-04-30 18:59:37