将所有 URL(包括现有文件)重定向到同一页面会导致 500 内部服务器错误
Redirecting all urls (including existing files) to the same page results in a 500 Internal Server Error
这是我当前的 .htaccess
文件:
RewriteEngine on
# remove trailing slash
RewriteRule (.*)(/|\)$ [R]
# everything
RewriteRule ^(.*?)$ /handler.php?url= [L,QSA]
但是,这不起作用,它会抛出 500 Internal Server Error
我以前的 .htaccess
文件如下所示:
RewriteEngine on
# remove trailing slash
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule (.*)(/|\)$ [R]
# everything
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*?)$ /handler.php?url= [L,QSA]
它有效,但特定文件除外。但是,现在我希望将特定文件也重定向到处理程序中。有没有办法在没有 RewriteCond
s 的情况下使用 RewriteRule
s?
如果没有 RewriteCond
进行文件检查,您可以像这样调整您的正则表达式:
RewriteEngine on
RewriteBase /
# remove trailing slash for non directories
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+?)/$ [R,L]
# every request not for handler.php
RewriteRule ^((?!handler\.php$).*)$ handler.php?url= [L,QSA]
在 CBroe and Sumurai8 的帮助下,我能够自行解决问题。问题不是没有 RewriteCond
s 就不能有 RewriteRule
s,而是如果你将每个 url 重写到一个文件中,它将把对该特定文件的请求重写到它自己再一次,创建一个无限循环。
新.htaccess
:
RewriteEngine on
# remove trailing slash
RewriteRule (.*)(/|\)$ [R,L]
# everything
RewriteCond %{REQUEST_URI} !^/handler.php$
RewriteRule ^(.*?)$ /handler.php?url= [L,QSA]
相关资源:Request exceeded the limit of 10 internal redirects
这是我当前的 .htaccess
文件:
RewriteEngine on
# remove trailing slash
RewriteRule (.*)(/|\)$ [R]
# everything
RewriteRule ^(.*?)$ /handler.php?url= [L,QSA]
但是,这不起作用,它会抛出 500 Internal Server Error
我以前的 .htaccess
文件如下所示:
RewriteEngine on
# remove trailing slash
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule (.*)(/|\)$ [R]
# everything
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*?)$ /handler.php?url= [L,QSA]
它有效,但特定文件除外。但是,现在我希望将特定文件也重定向到处理程序中。有没有办法在没有 RewriteCond
s 的情况下使用 RewriteRule
s?
如果没有 RewriteCond
进行文件检查,您可以像这样调整您的正则表达式:
RewriteEngine on
RewriteBase /
# remove trailing slash for non directories
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+?)/$ [R,L]
# every request not for handler.php
RewriteRule ^((?!handler\.php$).*)$ handler.php?url= [L,QSA]
在 CBroe and Sumurai8 的帮助下,我能够自行解决问题。问题不是没有 RewriteCond
s 就不能有 RewriteRule
s,而是如果你将每个 url 重写到一个文件中,它将把对该特定文件的请求重写到它自己再一次,创建一个无限循环。
新.htaccess
:
RewriteEngine on
# remove trailing slash
RewriteRule (.*)(/|\)$ [R,L]
# everything
RewriteCond %{REQUEST_URI} !^/handler.php$
RewriteRule ^(.*?)$ /handler.php?url= [L,QSA]
相关资源:Request exceeded the limit of 10 internal redirects