правило перезаписи работает, но не останавливается при совпадении в .htaccess

1

Я добавил следующие правила в файле.htaccess:

RewriteRule ^welcome/?$ index.php [NC,L] 
RewriteRule ^bye/?$ bye.php [NC,L]  
RewriteRule ^.*/?$ error.html [NC,L]

когда я вхожу в http://localhost/welcome, он переходит на страницу с ошибкой, а не на индексную страницу.

Но когда я удаляю последнее правило в файле.htaccess, он показывает страницу индекса. Не следует останавливаться при совпадении с первым правилом.

Я хочу, чтобы пользователи не могли напрямую обращаться к странице индекса, введя строку URL.

что не так?

Теги:
.htaccess
mod-rewrite

1 ответ

0
Лучший ответ

Вам нужно проверить REDIRECT_STATUS в отдельном правиле, чтобы проверить, выполняется ли правило один раз или нет.

RewriteEngine On

# check if rules have run once
RewriteCond %{ENV:REDIRECT_STATUS} !^$
RewriteRule ^ - [L]

# block direct access to index.php
RewriteCond %{THE_REQUEST} /index\.php [NC]
RewriteRule ^ - [F]

# your default rules
RewriteRule ^welcome/?$ index.php [NC,L] 
RewriteRule ^bye/?$ bye.php [NC,L]  
RewriteRule .* error.html [L]
  • 0
    Вы обычно даете отличные ответы, но в этом случае я думаю, что это странно сложно. не так ли? :)
  • 0
    Нет, это не так сложно, если вы прочитали 2 требования от ОП :)
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню