Я новичок в .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
также?!)