Перенаправьте все URL-адреса, кроме одного, в .htaccess

#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. Может быть, вам стоит прочитать вопрос еще раз. Все это.