2011-09-01 49 views
0

我想重定向來自我的.htaccess文件中的特定域的流量。它工作正常,除非我爲具有.to擴展名的域執行此操作。任何想法發生了什麼?添加RewriteCond與.to域時出現錯誤500

產生錯誤500:

RewriteCond %{HTTP_HOST}   ^(www\.)?domain\.to [NC] 
RewriteRule ^.*$     /foo/bar [L] 

正常工作:

RewriteCond %{HTTP_HOST}   ^(www\.)?domain\.com [NC] 
RewriteRule ^.*$     /foo/bar [L] 
+0

什麼Apache的錯誤日誌中說,有關這個錯誤? – LazyOne

+0

看起來它陷入了遞歸循環。 「由於可能的配置錯誤,請求超過了10個內部重定向的限制,如果需要,使用'LimitInternalRecursion'來增加限制,使用'LogLevel debug'來獲得回溯。 –

+0

也試過:的RewriteCond%{HTTP_HOST} \t \t \t ^(WWW \)域\。要 的RewriteCond $ 1 \t \t \t \t \t \t ^(/富/條)[NC] 重寫規則^ * $ \t?!。 \t \t \t \t/foo/bar [L] –

回答

1

因爲我不知道肯定這條規則不會產生重寫循環,我只能建議在這個時刻這個方法:

RewriteCond %{HTTP_HOST} ^(www\.)?domain\.to [NC] 
RewriteCond %{REQUEST_URI} !^/foo/bar 
RewriteRule ^.*$ /foo/bar [L] 

由於2個原因,您的嘗試在技術上不正確:

  • in .htaccess URL將不帶斜槓(我指的是$1);
  • 你正在使用$1 ..但你沒有匹配的組設置(換句話說$1將永遠是空的)。

如果仍然一無所獲 - 請提供真實的htaccess ...或者嘗試啓用重寫調試RewriteLogLevel 9) - 但對於這個你必須有過Apache服務器的完全控制,因爲這個指令不能放在.htaccess中(只有服務器配置/虛擬主機上下文)+您需要重新啓動Apache才能重新讀取配置文件。


嘗試在上面某處添加此規則 - 在那裏將是適當的:

# do not do anything for already existing files 
RewriteCond %{REQUEST_FILENAME} -f [OR] 
RewriteCond %{REQUEST_FILENAME} -d 
RewriteRule .+ - [L] 
+0

這是我真正的htaccess。 #直接默認尋路方向 的RewriteCond%{HTTP_HOST} \t \t \t ^(WWW \。)?bleau \。爲[NC] 的RewriteCond%{REQUEST_URI} \t \t \t!^ /服務/方向 重寫規則^。* $ \t \t \t \t \t/SERVICE/directions [L] –

+0

試過打開調試級別9,並輸出大量的數據。這是在一個生產環境中,所以很難看到哪些調試是我比其他流量。我需要將DNS更改爲更好的測試。 –

+0

您在.htaccess中有其他重寫規則嗎?由於mod_rewrite在迭代中工作(發生重寫時會進入下一次迭代,並從頭開始再次匹配所有規則)。您可能會這樣做,因爲其他規則會將URL從'/ SERVICE/directions'更改爲其他內容。並且在文本迭代中,它會再次被重寫。它自己的這條規則不會產生重寫循環。嘗試添加「不重寫現有文件/文件夾」規則 - 請參閱我的更新答案(1分鐘或2分鐘)。 – LazyOne

相關問題