Как запретить доступ, если URL-адрес запроса не содержит строки в файле .htacess

#regex #apache #.htaccess

Вопрос:

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

Пример: www.myalias.com/pass/whatever/here

Строка, на которую я смотрю, — это «пропуск», если в URL-адресе запроса есть «пропуск», затем разрешить доступ к веб-сайту, если нет, то верните ошибку 404.

Правило проверит, равно ли доменное имя «myalias.com» затем проверьте, существует ли строка «pass» в URL-адресе запроса.

Как я могу записать это в правило в файле .htaccess ?

Комментарии:

1. Вы пробовали какое-нибудь правило? Можете ли вы показать свой текущий .htaccess

Ответ №1:

Звучит довольно прямолинейно: вы проверяете http-хост, наличие пропуска и реагируете по желанию:

Это отклоняет запросы

 RewriteEngine on
RewriteCond %{HTTP_HOST} ^alias.example.com$
RewriteCond %{REQUEST_URI} !^/pass/
RewriteRule ^ - [F]
 

Этот отправляет пользовательский статус http (здесь 403):

 RewriteEngine on
RewriteCond %{HTTP_HOST} ^alias.example.com$
RewriteCond %{REQUEST_URI} !^/pass/
RewriteRule ^ - [R=403]
 

Или вы можете перенаправлять клиентов туда, куда хотите:

 RewriteEngine on
RewriteCond %{HTTP_HOST} ^alias.example.com$
RewriteCond %{REQUEST_URI} !^/pass/
RewriteRule ^ https://example.com/ [R=301]
 

Очевидно, что вам необходимо загрузить модуль перезаписи на ваш http-сервер. Как правило, такие правила должны быть реализованы в реальной конфигурации хоста http-сервера. Если вы действительно хотите использовать распределенный файл конфигурации («.htaccess»), вам необходимо сначала включить его интерпретацию (см. Документацию к AllowOverride директиве).

Комментарии:

1. Не работает, не уверен, почему всегда есть ответ 403, даже если /pass/ является частью URL-адреса.

2. Он работает, когда вы проверяете, существует ли он, но при добавлении !^ он всегда выдает ошибку 403. Есть какие-нибудь предложения?

3. Какой вариант вы используете?

4. Я использую это: RewriteEngine на RewriteCond %{HTTP_HOST} ^alias.example.com$ Перезапись секунды %{REQUEST_URI} !^/передача/ перезапись ^ — [R=403]

5. Набор правил верен и работает. Если вы получаете другие результаты, здесь вмешивается еще один фактор: кэшированный результат, некоторые другие правила, о которых вы не упомянули, запрос к URI, отличный от того, что вы утверждаете.