Я новичок в .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]
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
?!)