2016-02-20 46 views
1

我必須通過.htaccess文件傳遞一個查詢字符串變量「_page」,這會導致505(內部服務器)錯誤。505錯誤在.htaccess文件中傳遞查詢字符串變量

這是我的.htaccess文件:

DirectoryIndex index.php 
<IfModule mod_rewrite.c> 
RewriteEngine on 
RewriteCond %{HTTP_HOST} !^www\. 
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L] 
#Make sure that there is ALWAYS a querystring variable named "__page" 
RewriteCond %{REQUEST_FILENAME} -f 
RewriteRule ^(.*\.(php|xml))$ $1?__page=$1 [L,QSA] 

#Append ".php" to the requested file 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME}.php -f 
RewriteRule ^(.*)$ $1.php?__page=$1.php [L,QSA] 
</IfModule> 

當我發表意見線

#RewriteRule ^(.*\.(php|xml))$ $1?__page=$1 [L,QSA] 
在.htaccess文件

,505雲,但它顯示一個警告 「未定義指數:__page」

+1

'「_page」'不等於'__page' –

+0

由具有內部服務器錯誤,看看你的服務器的錯誤日誌。應該記錄一個特定的錯誤信息。 – KittMedia

+0

@Anant它的「__page」,這是錯誤的描述 – satish

回答

0

在* .php和* .xml請求中,您會收到500錯誤,因爲您的規則導致服務器發生無限循環錯誤。

#RewriteRule ^(.*\.(php|xml))$ $1?__page=$1 [L,QSA] 

上面的規則改寫

  • /foo.php => /foo.php?__page=foo.php

以及在所述第二重寫迭代

  • /foo.php?__page=foo.php => /foo.php?__page=foo.php

正如您所看到的,在第二次重寫迭代中,目標url將被重寫爲自身。這直到第10次迭代,並且服務器返回500錯誤。

爲避免無限循環錯誤,您必須排除要重寫的目標路徑。

而在你的情況下,目標路徑是:

/foo.php?__page=foo.php

要重寫排除這種,您將使用

RewriteCond %{QUERY_STRING} ^$ 
RewriteRule ^(.*\.(php|xml))$ $1?__page=$1 [L,QSA] 

,這意味着「沒有查詢字符串「,條件表示如果沒有查詢字符串,則將應用該規則。這將忽略第二次迭代。

(希望這有助於!)

+1

非常感謝,它解決了這個問題。感謝您的好消息,真的很有幫助.. – satish