2012-09-24 50 views
0

我正在嘗試使用Apache vhosts配置控制我的網站上的重定向。Apache vhosts配置RewriteCond忽略URL的一部分

我有兩個字母的區域設置,如/fr,/de,/es,我目前正在忽略,你會從我的虛擬主機文件下面看到。不過,我也有一個301永久重定向設置重定向/釐米(和/fr/cm,/es/cm等)到另一個頁面 - 這是在我的後端系統控制。

的併發症是當我添加行RewriteCond %{REQUEST_URI} !^/cm這是由的RewriteCond抓住了,但是我再不能在所有訪問/fr/de/es因爲他們似乎陷入一個循環,並轉到:www.ayrshireminis.com/fr/fr/fr/fr/fr/fr/fr/fr和那麼它就是HTTP 500內部服務器錯誤。

我如何可以改變的RewriteCond允許:

  • /PA(這將被重定向到/迷你,但在數據庫中控制,需要保持一個有效的URL)
  • /FR(區域)
  • /FR/PA
  • /ES/PA

# ---------------------------------------------------------------------- 
    # REGION SPECIFIC REDIRECTIONS 
    # Below will remove region specific part of URL and load content from main UK site 
    # ---------------------------------------------------------------------- 
    RewriteCond    %{REQUEST_URI}     ^/([a-z]{2})$     [OR] 
    RewriteCond    %{REQUEST_URI}     ^/([a-z]{2}/)(.*)$ 
    RewriteCond    %{REQUEST_URI}     !^/cm 
    RewriteRule    ^([a-z]{2}/|[a-z]{2})(.*)$  /$2            [L,QSA] 

    # For VirtualDocumentRoot development instance configurations 
    RewriteRule ^([^.]+)$ /index.php?url=$1 [L,QSA] 
+0

你打算導致哪些URL重定向到「www.ayrshireminis.com/fr/fr/fr/fr/fr/fr/fr/fr」? –

回答

0

想想我在這裏看到你的麻煩。您的問題的格式似乎掩蓋了您的第一個RewriteCond行末尾的[OR] 和RewriteRule本身的[L,QSA]

這裏是我建議你嘗試,而不是:

RewriteCond %{REQUEST_URI} !^/cm 
RewriteCond %{REQUEST_URI} ^/([a-z]{2})/?(.*)$ 
RewriteRule .* $2 [L,QSA] 

我更喜歡使用「守護者」的格局扔掉任何東西,這將是從一開始就保持不變。您列出的指令的邏輯似乎存在錯誤。前兩個指令似乎在說「如果REQUEST_URI與只有兩個字符它只有兩個字符開始啓動時,有一個‘/’,然後不管走到最後,然後繼續處理。」

如果REQUEST_URI是「/ fr」,它將與您在問題中包含的指令的第一個RewriteCond相匹配。但是如果它符合這個要求,那麼它會做什麼?如果您正在尋找重寫第二個括號分組,並且如果模式沒有檢測到第二個括號分組,那麼如果沒有任何要重定向到的地方,如何進行重定向?然後,請求會在您的配置中進一步傳遞到後續的重寫規則。

我也認爲RewriteRule可能是壞的。在你當前指令,你可能應該有:

RewriteRule ^/([a-z]{2}/|[a-z]{2})(.*)$ /$2 [L,QSA] 

你或許應該在前面的「/」字符添加,否則「$ 2」可能會匹配到整個REQUEST_URI。 REQUEST_URI應該始終以「/」開頭。

您可能已經嘗試過這種方式,但會建議您啓用更詳細的日誌記錄,tail日誌文件以查看模式是否匹配,而您將它們輸入到瀏覽器並打開網站。我目前使用的:

RewriteEngine On 
RewriteLog /usr/local/apache2/logs/rewrite.log 
RewriteLogLevel 3 

我無法解釋爲什麼你在重定向循環結束了,因爲[L]應防止這一點。唯一我能想到的是,如果應用程序的其他方面(包括這些指令之外)涉及重定向,它們可能會以某種方式引發這種行爲,並將請求反饋給Apache。更詳細的日誌記錄可能有助於將其與您的access_log結合起來。