我对此还很陌生.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
如此?!)