使用 htacess 时服务器抛出 LimitInternalRecursion 错误

使用 htacess 时服务器抛出 LimitInternalRecursion 错误

我对此还很陌生.htaccess,只是没有深入研究以了解发生了什么。服务器只是说,超出了 10 次内部重定向的限制,尽管我看不出它“重定向”的任何理由。只有当我尝试使用时才会发生这种情况/users/Username/users/显示无法找到此用户的错误,这正是我想要的,/users/Username抛出 500 内部服务器错误。文档本身很好,数据库检查也应该有效。文档.htaccess是:

RewriteEngine On

RewriteCond %{HTTPS} !=on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
RewriteRule ^(.*)$ https://%1/$1 [R=301,L]

RewriteCond %{REQUEST_FILENAME}.php -f
RewriteCond %{REQUEST_URI} !/$
RewriteRule (.*) $1\.php [L]

IndexIgnore * 

ErrorDocument 400     /
ErrorDocument 404     /

RewriteRule    ^users/([a-zA-Z0-9_-]+)/?$ users.php?id=$1    [NC,L]

答案1

RewriteCond %{REQUEST_FILENAME}.php -f
RewriteCond %{REQUEST_URI} !/$
RewriteRule (.*) $1\.php [L]
:
RewriteRule    ^users/([a-zA-Z0-9_-]+)/?$ users.php?id=$1    [NC,L]

第一个规则块捕获对 的请求/users/Username。在本例中,REQUEST_FILENAME.../users(有效目录后的第一个完整路径段),并且.../users.php在本例中确实是有效文件。但是,您正在附加.php到所请求 URL 的末尾,因此/users/Username变成/users/Username.php/users/Username.php.php等。

您可以通过简单地反转这些指令的顺序来解决此冲突:

RewriteRule ^users/([a-zA-Z0-9_-]+)/?$ users.php?id=$1    [L]

RewriteCond %{REQUEST_FILENAME}.php -f
RewriteCond %{REQUEST_URI} !/$
RewriteRule (.*) $1.php [L]

现在,的请求/users/Username将被第一条规则捕获并正确路由到user.php?id=Username,但无法与第二条规则块匹配。

(我删除了该NC标志,因为你已经a-zA-Z在检查图案。除非也/users/uSeRs如此?!)

相关内容