Назад | Перейти на главную страницу

Сервер выдает ошибку LimitInternalRecursion при использовании htaccess

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