将所有 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]

它有效,但特定文件除外。但是,现在我希望将特定文件也重定向到处理程序中。有没有办法在没有 RewriteConds 的情况下使用 RewriteRules?

如果没有 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 的帮助下,我能够自行解决问题。问题不是没有 RewriteConds 就不能有 RewriteRules,而是如果你将每个 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