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

Я новичок в .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]
2
задан 23 March 2017 в 15:09
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 ?!)

1
ответ дан 3 December 2019 в 12:36

Теги

Похожие вопросы