2016-02-20 31 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