2013-05-02 163 views
1

注意:爲簡單解釋問題並保留基本知識,此處不對代碼進行清理。我的生產代碼將在處理前清理$ _GET。導致500內部服務器錯誤的HTACCESS

這裏是我的.htaccess文件:

RewriteEngine on 
RewriteCond %{REQUEST_URI} "/files/" 

RewriteRule (.*) $1 [L] 
RewriteRule ^(.*)/(.*)$ ?cat=$1&title=$2 [L] 
RewriteRule ^(.*) ?cat=$1 

這是我的PHP文件:

$cat = $_GET['cat']; 
$title = $_GET['title']; 

if($cat && !$title) { 
    echo 1; 
} 

if($cat && $title) { 
    echo 2; 
} 

如果我去我的測試網址:http://local.testzone.com/cat/titlehttp://local.testzone.com/cat

我得到一個500內部服務器錯誤。

如果我評論在.htaccess文件的最後一行:

#RewriteRule ^(.*) ?cat=$1 

http://local.testzone.com/cat給我:

未找到

在此服務器上找到請求的URL /貓。

http://local.testzone.com/cat/title給我:

這是它應該做的,按照2我的我的PHP回聲如果貓和標題存在。

我的問題是 - 我如何修改訪問文件,所以如果只有一隻貓,它會回顯1?我能做到這一點的唯一方法是手動設置第一個層次是這樣的:

RewriteRule ^cat$ ?cat=cat 

這工作,但不會在我寫的應用程序。我需要根據URL中的cat值來查詢數據庫。 cat值可以動態更改,我不能將其硬編碼到htaccess文件中。標題工作正常,但我如何獲得貓部分功能?

希望我的要求很明確,期待有任何幫助!

+0

您的重寫規則導致無限循環,apache可能在10次重定向後中斷。嘗試審查它們,尤其是這一個:RewriteRule ^(。*)?cat = $ 1 – nicolas 2013-05-02 23:17:53

回答

0

您可以清理一些規則,但是您需要添加一個條件以防止規則循環。重寫過程將通過您的規則持續運行請求URI,直到URI停止更改(或達到內部遞歸限制,即500錯誤)。

RewriteEngine on 

RewriteRule ^/?files/ - [L] 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)/(.*)$ ?cat=$1&title=$2 [L] 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*) ?cat=$1 
相關問題