#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
статистика с фактическим URI4. Большое вам спасибо! Это отлично работает. Справедливости ради: я приму ответ @Amit Verma, потому что его подход тоже работает, и он ответил первым.
5. Большое вам спасибо! Увидимся!