2013-01-15 187 views
0

我有這個很基本的重寫規則,不管我怎麼努力,結果在錯誤500基礎的mod_rewrite規則導致500內部服務器錯誤

RewriteEngine On 
RewriteRule ^folder/(.*) /folder/index.php?Alias=$1 [L] 

我的httpd.conf文件中有如下內容:(這似乎對我很好)

<Directory "/var/www/html"> 
    Options -Indexes FollowSymLinks 
    AllowOverride All 
    Order allow,deny 
    Allow from all 
    <IfModule mod_suphp.c> 
     suPHP_Engine On 
     suPHP_UserGroup webapps webapps 
    SetEnv PHP_INI_SCAN_DIR 
    </IfModule> 
</Directory> 

有什麼建議可能會出錯?我還試圖在我的重寫規則結尾添加$

回答

1

重寫引擎將重複循環,直到URI停止更改,或達到導致500錯誤被引發的內部重定向限制。你的規則的目標URI /folder/index.php將被拋回到重寫引擎中,並且你的規則的正則表達式匹配它,^folder/(.*)。所以你需要添加一些條件來防止循環。

RewriteEngine On 
RewriteCond %{REQUEST_URI} !^/folder/index\.php 
RewriteRule ^folder/(.*) /folder/index.php?Alias=$1 [L] 

這很簡單,如果它已經開始於/folder/index\.php,它將不適用規則。您也可以嘗試:

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^folder/(.*) /folder/index.php?Alias=$1 [L] 

這對條件限制較少。它只適用於規則,如果請求的URI不映射到現有的文件或目錄。這假定當你試圖去/folder/blahblah那裏不是一個目錄或文件blahblah並且你想通過你的index.php路由它。

+0

我完全忽視了循環的情況,有點兒盯着我的光標,想着「爲什麼不按照你的意思去做呢」。 (.htaccess,讓我感到困惑,告訴我它正在做它被告知的事情))謝謝。 +1並被接受。 – Ben

相關問題