Редирект на ошибку в htaccess

NTP

Пытаюсь проверять в .htaccess верно ли введена строка на профиль таким правилом:

Options +FollowSymLinks -Indexes -MultiViews  
RewriteEngine on  

RewriteRule ^([\w\d]{3,15})$ index.php?profile=$1 [L]
RewriteRule ^(.*)$ error.php [L]

Но меня постоянно редиректит на ошибку, в чем может быть проблема и как можно исправить? Возможно я просто неправильно понимаю смысл флага [L]

1 ответ

NTP

Попробуйте так:

RewriteRule ^([\w\d]{3,15})$ index.php?profile=$1 [L]
RewriteCond %{QUERY_STRING} !^profile=([\w\d]{3,15})$
RewriteRule ^(.*)$ error.php [L]

Модификатор [L] самый, пожалуй, коварный из всех в mod_rewrite, как и сам mod_rewrite не такой уж и очевидный.

Подавляющее большинство думает, что раз я поставил в конце правила [L], то дальнейшие правила игнорируются, пропускаются и т.д.

mod_rewrite запускает обработку запроса снова и снова, до тех пор, пока он не перестанет меняться. И флаг [L] не может это остановить.

[L] просто остановит текущий проход правил, а mod_rewrite запустит процесс заново, если было хоть одно изменение в RewriteRule.

licensed under cc by-sa 3.0 with attribution.