.htaccess перенаправляет все страницы, кроме одного и другого внутреннего перенаправления определенного домена

#apache #.htaccess #mod-rewrite

#apache #.htaccess #мод-перезапись

Вопрос:

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

 RewriteEngine on

Rewritecond %{HTTP_HOST} !^host.mysite.com
RewriteRule ^link/([^/] )/([^/] )/([^/] )$          dokument_by_link.php?$1=1amp;document_type=$2amp;value=$3 [NC,L]

Rewritecond %{HTTP_HOST} !^host.mysite.com
RewriteCond %{REQUEST_URI} !^/link/
RewriteCond %{REQUEST_URI} !^dokument_by_link.php
RewriteRule (.*)                                    https://www.anothersite.de/$1 [R=302,L]

#This should not apply to host.mysite.com, but I think this is already accomplished by the L-flag above
RewriteRule ^test/?$                                       test.php [L,NC]
 

host.mysite.com/link / должен быть перенаправлен на host.mysite.com/document_by_link.php

RewriteRule ^link/([^/] )/([^/] )/([^/] )$ dokument_by_link.php?$1=1amp;document_type=$2amp;value=$3 [NC,L]

Все остальные запросы должны быть перенаправлены на https://www.anothersite.de

Большое вам спасибо!

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

1. Ваш вопрос неясен. Что вы подразумеваете под » . Но запрос также нуждается в перенаправлении «. ? и какой URL-адрес вы хотите исключить из перенаправления?

2. @AmitVerma Спасибо за ваш комментарий. Теперь это понятнее?

Ответ №1:

Это должно сработать :

 RewriteEngine on

#rewrite /link to /document_by_link.php
RewriteRule ^link/?$ /document_by_link.php [L]
#redirect all other URLs to https://www.anothersite.de
RewriteRule !dokument_by_link.php$ https://www.anothersite.de%{REQUEST_URI} [L,R]
 

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

1. Большое вам спасибо, но это не работает. Первое правило отлично работает само по себе. Но как только я добавляю второе правило, первое больше не работает: RewriteRule ^link/([^/] )/([^/] )/([^/] )$ dokument_by_link.php?$1=1amp;document_type=$2amp;value=$3 [NC,L] RewriteRule . https://www.onwalt.de/$1 [L,R=302]

2. @Phantom Вы получаете какую-либо ошибку? Как это не работает?

3. https://host.mysite.com не перенаправляется на https://www.anothersite.de . После перехода . на (.*) редирект работает. Но перенаправление ссылки на document_by_link не работает.

4. https://host.mysite.com/link/first/second/third также перенаправляется на https://www.anothersite.de

5. @Phantom Я обновил правило. Пожалуйста, перезагрузите страницу, чтобы увидеть ее.

Ответ №2:

Это должно сработать для вас:

 RewriteEngine On

Rewritecond %{HTTP_HOST} ^host.mysite.com$ [NC]
RewriteCond %{THE_REQUEST} !s/link/ [NC]
RewriteRule ^ https://www.anothersite.de%{REQUEST_URI} [R=302,L,NE]

Rewritecond %{HTTP_HOST} ^host.mysite.com$ [NC]
RewriteRule ^link/([^/] )/([^/] )/([^/] )$ dokument_by_link.php?$1=1amp;document_type=$2amp;value=$3 [NC,L,QSA]

RewriteRule ^test/?$ test.php [L,NC]
 

Использование THE_REQUEST вместо REQUEST_URI here as REQUEST_URI может измениться на переписанный URI, тогда THE_REQUEST как для области веб-запроса остается неизменным.

THE_REQUEST переменная представляет исходный запрос, полученный Apache из вашего браузера, и он не перезаписывается после выполнения других директив перезаписи. Примерное значение этой переменной GET /index.php?id=123 HTTP/1.1

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

1. Большое вам спасибо, но это не работает. Первое перенаправление (все страницы на другой сайт) не применяется

2. Спасибо! Похоже, что вы обновили правила. Могу ли я также ограничить первое правило хостом host.mysite.com ? В чем разница между !^/link/ и !s/link/ ? Почему вы используете ^ вместо (.*) ?

3. Да, мы можем ограничить, см. Мой обновленный ответ, а также см. Не включено THE_REQUEST . Здесь THE_REQUEST начинается с GET или POST или PUT etc, за которым следует один пробел. Где как REQUEST_URI статистика с фактическим URI

4. Большое вам спасибо! Это отлично работает. Справедливости ради: я приму ответ @Amit Verma, потому что его подход тоже работает, и он ответил первым.

5. Большое вам спасибо! Увидимся!