2010-08-24 228 views
1

我最近對我的網站的文件夾結構做了一些小的修改,現在我的一個重寫程序看起來壞了。.htaccess子域到文件夾

在過去,我在public_html中創建了一個/mydomain.com/文件夾,其中創建了一個wiki。在同一個文件夾中有一些我用於子域訪問的文件夾,如成員和文件。

的舊體制:

#www to main website 
RewriteCond %{HTTP_HOST} ^www.mydomain.com$ 
RewriteRule ^(.*)$ mydomain.com/$1 [L] 

#subdomain to folder (members. => /members/, files. => /files/, etc) 
RewriteCond %{HTTP_HOST} ^(.*).mydomain.com$ 
RewriteCond %{HTTP_HOST} !^www.mydomain.com$ 
RewriteRule ^(.*)$ mydomain.com/%1/$1 [L] 

相當容易,而當我在files.mydomain.com/myfile.zip輸入它的工作沒有任何問題。

最近我安裝我的wiki的幾種語言(這實際上是不相關的問題,但只是爲了闡述的情況),我做了如下規則:

#to the right language folder (www = en) 
RewriteCond %{HTTP_HOST} ^(www|nl|es).mydomain.com$ 
RewriteRule ^(.*)$ mydomain.com/%1/$1 [L] 

#subdomain to folder (members. => /members/, files. => /files/, etc) 
RewriteCond %{HTTP_HOST} ^(.*).mydomain.com$ 
RewriteCond %{HTTP_HOST} !^www.mydomain.com$ 
RewriteRule ^(.*)$ mydomain.com/misc/%1/$1 [L] 

顯然,維基百科不同的語言是設置在mydomain.com/www/,mydomain.com/es/等,這工作得很好。 問題出在第二部分,子文件夾。在同一個mydomain.com/文件夾中,我創建了一個misc /文件夾來存儲所有misc內容(包括子域文件夾)。我想只是在路徑中添加/ misc /(就像我在第一條規則中添加語言文件夾名稱)會使其工作..但它給我一個500錯誤。 舊的安裝程序和新安裝程序都沒有任何可能與第二條規則衝突的任何文件夾中的.htaccess行。

任何人都可以發現錯誤,或告訴我如何系統地檢查此設置的錯誤?

+0

我希望您的舊設置和新設置都能生成500錯誤。您的舊設置是否在關閉'mod_rewrite'或其他東西的子目錄中包含'.htaccess'文件? – 2010-08-24 15:18:51

+0

嗯,不,據我所知只是一些mediawiki特定的規則(只適用於/ wiki /包含在URI中)。你爲什麼期望這個錯誤? – 2010-08-24 15:26:50

+0

您的規則將導致無限重定向循環。在你的Apache錯誤日誌中,它可能表示類似「由於可能的配置錯誤,請求超過了10個內部重定向的限制」? – 2010-08-24 15:44:15

回答

2

阻止重定向循環的最簡單方法我相信正在發生的事情就是檢查您是否已經將URL重寫到了您想要的位置。我們可以用幾種不同的方式來做到這一點如果您知道該文件在您重寫該文件後就會存在,則可以在%{REQUEST_FILENAME} !-f的條件下進行處理。

在你的情況,因爲你的/public_html目錄中改寫一切,一個共同的文件夾,我們可以只檢查,如果這是已經完成:

#to the right language folder (www = en) 
RewriteCond %{HTTP_HOST} ^(www|nl|es)\.example\.com$ 
RewriteCond %{REQUEST_URI} !^/example\.com 
RewriteRule ^(.*)$ example.com/%1/$1 [L] 

#subdomain to folder (members. => /members/, files. => /files/, etc) 
RewriteCond %{HTTP_HOST} ^(.*)\.example\.com$ 
RewriteCond %{HTTP_HOST} !^www\.example\.com$ 
RewriteCond %{REQUEST_URI} !^/example\.com 
RewriteRule ^(.*)$ example.com/misc/%1/$1 [L] 

誠然,我不知道爲什麼你」現在重新遇到問題,但以前沒有。我在我的測試服務器上運行了您的原始規則集,並由於內部重定向過多而導致內部服務器錯誤,因此我們的設置中必定存在差異。無論如何,希望這會讓事情爲你工作。

+0

我會在一秒內嘗試這個,但/example.com/子文件夾不應該在任何時候在uri中。重寫過程中沒有[R]標誌,因此應該保持隱藏狀態。我可以嘗試檢查文件的存在,但是如果我輸入了不正確的文件名,這意味着我仍然會收到服務器錯誤,而不是常規的404. 此外,它應該表示第一條規則也不起作用它確實如此。錯誤在於兩個規則之間的差異,但我無法弄清楚什麼是不同的。我檢查了第一條規則的htaccess文件,但是我也找不到任何東西。 – 2010-08-25 17:37:34

+0

@Litso - 我忘了解釋這一點,但在執行初始重寫以包含新的內部請求路徑後,內部更改了'%{REQUEST_URI}'的值,即使此轉換對用戶不可見這就是爲什麼我們可以執行該檢查。 – 2010-08-25 17:49:42

+0

謝謝,我不知道最後一部分。在uri中檢查/example.com/似乎確實起作用,我應該聽取了意見:P 至少我今天學到了一些東西。 – 2010-08-25 19:08:34