我必须传递一个查询字符串变量" _page"通过.htaccess文件,它会产生505(内部服务器)错误。
这是我的.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继续,但它会显示警告&#34;未定义的索引:__ page&#34;
答案 0 :(得分:0)
在* .php和* .xml上请求您收到500错误,因为您的规则导致服务器上出现无限循环错误。
#RewriteRule ^(.*\.(php|xml))$ $1?__page=$1 [L,QSA]
上述规则重写
在第二次重写迭代
正如您所看到的,在第二次重写迭代中,目标URL正在重写自身。这种情况一直持续到第10次迭代,服务器返回500错误。
要避免无限循环错误,必须排除要重写的目标路径。
在您的情况下,目标路径是:
/foo.php?__ page = foo.php
要从重写中排除此项,您将使用
RewriteCond %{QUERY_STRING} ^$
RewriteRule ^(.*\.(php|xml))$ $1?__page=$1 [L,QSA]
表示&#34;没有查询字符串&#34;,条件表示如果没有查询字符串,则将应用该规则。这将忽略第二次迭代。
(希望这会有所帮助!)