1
在我的.htacccess文件中,我有兩個重寫規則,但無法正常工作。下面是代碼:如何防止多個子域重寫規則出現500錯誤?
RewriteCond %{HTTP_HOST} ^admin.example.com [NC]
#RewriteRule ^administration/ - [L]
RewriteRule (.*) administration/$1 [L]
RewriteCond %{HTTP_HOST} ^example.com [NC]
RewriteRule ^(.*)$ http://www.example.com/$1 [L,R=301]
上面的代碼的結果是:
- admin.example.com - 500內部服務器錯誤
- example.com - 做工精細
但如果我取消註釋第二行並運行RewriteRule ^administration/ - [L]
,結果爲:
- admin.example.com - 做工精細
- example.com - 500內部服務器錯誤
實際上,我不知道什麼第二行實際上做的事情。我不擅長htaccess重寫編碼。我從another question here on Stackoverflow發現那一行。
關於500錯誤,我認爲它是由無限循環造成的。但不能真正看到它的代碼如何顯示。所以真的想得到解釋。
所以,我真的很想得到答案的是:
- 是什麼線2點的手段,特別是「 - 」字呢?
- 什麼導致500錯誤?
這解決了這個問題。十分感謝。如果你想解釋什麼導致了循環和你做了什麼,它真的很感激。不過謝謝。 – 2014-11-05 21:41:48
問題出在這個規則:'RewriteRule(。*)administration/$ 1 [L]'因爲它無條件地將每個請求路由到'/ administration',並且mod_rewrite一直運行,因爲這個規則並沒有停止重寫。在我的答案中使用負向lookahead正則表達式後,它會在第一次重寫後停止。 – anubhava 2014-11-05 21:47:59
好吧,現在這導致了一個新問題,這也許應該是它自己的問題。但我在管理中有一個相同的htaccess文件副本(我記得其實名爲「test」)。這導致了一個新的無限循環。我這次明白了爲什麼,但無法弄清楚如何避免。我想保留兩個文件中完全相同的代碼。是否有可能檢查你所在的目錄? – 2014-11-06 09:24:12