#regex #.htaccess #drupal
Вопрос:
Я пытаюсь перенаправить все URL-адреса на своем сайте (назовем это www.site1.com) кроме одного в моем файле .htaccess. В настоящее время в моем файле .htaccess есть следующее:
RewriteEngine on
RewriteCond %{REQUEST_URI} !^/my/page$ [NC]
RewriteRule (.*) https://www.site2.com [R=302,L]
Учитывая вышесказанное, все просьбы к www.site1.com перенаправляются на www.site2.com, в том числе и тот, который я не хочу перенаправлять.
После некоторых экспериментов я обнаружил, что следующее работает для перенаправления только определенной страницы:
RewriteEngine on
RewriteCond %{REQUEST_URI} ^/my/page$ [NC]
RewriteRule (.*) https://www.site2.com [R=302,L]
Я не совсем понимаю, почему ! оператор работает не так, как я ожидал. Возможно, в моем регулярном выражении есть ошибка?
Немного дополнительной информации. Это сайт Drupal, работающий на выделенном хосте cPanel. Но я был уверен, что поставлю это новое правило перезаписи перенаправления перед всеми другими правилами перезаписи, специфичными для Drupal.
Любая помощь была бы очень признательна.
Комментарии:
1. Не лучше ли сначала создать условие для этой единственной страницы, а поскольку оно не совпадает с другими страницами, создать другое для остальных?
2.Ваша первая версия верна, она работает (при условии, что запрошенный URL-адрес действительно есть
/my/page
). Вопрос в том, почему это не работает в вашем конкретном случае … Первое предположение: вы просматриваете кэшированные результаты предыдущих попыток?3. @onlineThomas — Я, безусловно, открыт для другого подхода. Если бы вы могли представить свою идею более подробно в качестве ответа, я был бы рад попробовать ее.
4. @arkascha — Я был уверен, что очистил кэш, и я трижды проверил правильность URL-адресов. Я вижу www.site1.com/my/page перенаправление вместе со всеми остальными.
5. Затем я предлагаю вам включить ведение журнала перезаписи на вашем http-сервере, чтобы иметь возможность наблюдать за действиями, выполняемыми в вашем механизме перезаписи. В документации объясняется, как это сделать.
Ответ №1:
RewriteCond %{REQUEST_URI} !/(index.php) [NC]
RewriteRule ^(.*)$ index.php [NC,QSA,L,END]
Вам нужно убедиться, что вы исключили страницу, на которую вы перенаправляете, из списка возможных URL-адресов, которые перенаправляются(чтобы избежать цикла), а затем вы можете добавить еще до перезаписи.
Переписать секунду %{REQUEST_URI} !/(index.php) [NC]
Переписать секунду %{REQUEST_URI} !/(index_new.php) [NC]
Перезапись ^(.*)$ index.php [NC,QSA,L,КОНЕЦ]
Комментарии:
1. Это то, что пытается сделать ОП, и, по его словам, это не работает. Какой смысл говорить ему, что он должен делать то, что он действительно пытается сделать? Особенно с использованием примера, который сам по себе противоречив и не соответствует деталям в ответе.
2. Он не отрицает конечный сайт 2, а затем он в конечном итоге перенаправляет сайт 2 на сайт 2, и он этого не хочет. Это распространенная ошибка при перенаправлении .htaccess, вам всегда приходится отменять пункт назначения, чтобы избежать зацикливания.
3. Может быть, вам стоит прочитать вопрос еще раз. Все это.