.htaccess mod_rewrite не будет пропускать RewriteRule с [S] - PullRequest
3 голосов
/ 28 марта 2012

Для справки: я использую следующий файл .htaccess, расположенный по адресу www.site.com/content/

Когда пользователь заходит на сайт www.site.com/content/login, я хочу, чтобы он отображал контент с сайта www.site.com/content/userlogin.php (маскируется переписать, а не перенаправить) - что я сделал УСПЕШНО, вот так:

RewriteEngine On
RewriteBase /content/
RewriteRule ^login/?$ /content/userlogin.php [NC,L]


Однако я хотел бы добавить следующее: Если они попытаются получить прямой доступ к www.site.com/content/userlogin.php, я хочу, чтобы они были перенаправлены на страницу 404 по адресу www.site.com/content/error/404.php

RewriteEngine On
RewriteBase /content/
RewriteRule ^login/?$ /content/userlogin.php [NC,S=1,L]
RewriteRule ^userlogin\.php$ /content/error/404.php [NC,L]


С этим в файле .htaccess как www.site.com/content/login, так и www.site.com/content/userlogin.php show www .site.com / содержание / ошибка / 404.php

Ответы [ 2 ]

2 голосов
/ 29 марта 2012

Сначала S = 1 не будет работать, так как директива L остановит дальнейшую перезапись. Похоже, что первый RewriteRule заставляет Apache пройти правила .htaccess еще раз, поэтому вам нужно знать, произошло ли первое перезапись. Вы можете сделать это, установив переменную окружения следующим образом:

RewriteRule ^login/?$ /content/userlogin.php [E=DONE:true,NC,L]

Таким образом, когда происходит следующее перенаправление, переменная Environment фактически переписывается в REDIRECT_<variable>, и вы можете сделать RewriteCond для этого следующим образом:

RewriteCond %{ENV:REDIRECT_DONE} !true
RewriteRule ^userlogin\.php$ /content/error/404.php [NC,L]

Надеюсь, это поможет

0 голосов
/ 29 марта 2012

Используйте %{THE_REQUEST} переменную в вашем коде вместо:

RewriteEngine On
RewriteBase /content/

RewriteRule ^login/?$ content/userlogin.php [NC,L]

RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/+userlogin\.php[\s\?] [NC]
RewriteRule ^ content/error/404.php [L]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...