#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, отличный от того, что вы утверждаете.