Перенаправление 301 htaccess для указанного домена c - PullRequest
0 голосов
/ 18 марта 2020

Я пробую несколько вещей для перенаправлений, но без рабочего решения.

У меня есть 2 домена, указывающие на одну папку / веб-сайт (mulitshops prestashop), и я хотел бы перенаправить некоторую страницу с первого домена на указать c страницу и сохранить домен.

Моя работа:

Options +FollowSymLinks -MultiViews
RewriteEngine On

RewriteCond %{HTTP_HOST} ^domain1.local$ [NC]
RewriteRule ^/fr/blog/inspirations-c4$ https://domain1.local/fr/journal [R=301,L]
RewriteRule ^/fr/blog/inspirations-c3$ https://domain1.local/fr/journal [R=301,L]

RewriteCond %{HTTP_HOST} ^domain2.local$ [NC]
RewriteRule ^/fr/blog/inspirations-c4$ https://domain2.local/fr/test [R=301,L]
RewriteRule ^/fr/blog/inspirations-c3$ https://domain2.local/fr/test [R=301,L]

Но я не могу сделать это с простым Redirect 301, потому что я не могу указать домен из URI запроса. На целевой странице все не так в зависимости от домена.

Извините за мой английский sh и заранее благодарю за помощь.

1 Ответ

1 голос
/ 18 марта 2020

В дополнение к тому, что @ DusanBaji c объяснил в своем комментарии к вашему вопросу, вам также необходимо учитывать разницу между абсолютным и относительным путем в правилах переписывания. Это на самом деле явно задокументировано ...

При реализации в распределенных файлах конфигурации (".htaccess") шаблон правила сопоставляется с относительным путем запрошенного URL. Однако вы пытаетесь сопоставить его с абсолютным путем, который никогда не будет совпадать. Так что либо измените ваши шаблоны, чтобы использовать относительные пути, либо, предпочтительно, внедрите свои правила перезаписи, чтобы они работали в обоих случаях. То же самое относится и к правилам, реализованным в конфигурации хоста реального http-сервера, где шаблон сопоставляется с абсолютным путем в запрошенном URL-адресе. Это кажется странным на первый взгляд. Но это имеет смысл, если подумать.

Options +FollowSymLinks -MultiViews

RewriteEngine On

RewriteCond %{HTTP_HOST} ^domain1\.local$ [NC]
RewriteRule ^/?fr/blog/inspirations-c4$ https://domain1.local/fr/journal [R=301,L]
RewriteCond %{HTTP_HOST} ^domain1\.local$ [NC]
RewriteRule ^/?fr/blog/inspirations-c3$ https://domain1.local/fr/journal [R=301,L]

RewriteCond %{HTTP_HOST} ^domain2\.local$ [NC]
RewriteRule ^/?fr/blog/inspirations-c4$ https://domain2.local/fr/test [R=301,L]
RewriteCond %{HTTP_HOST} ^domain2\.local$ [NC]
RewriteRule ^/?fr/blog/inspirations-c3$ https://domain2.local/fr/test [R=301,L]

Хорошей идеей будет начать с временного перенаправления 302 и изменить его только на постоянное перенаправление 301 позже, если вы уверены, что все настроено правильно. Это предотвращает проблемы с кэшированием при испытаниях.

Эта реализация будет работать аналогичным образом в конфигурации хоста http-серверов или внутри распределенного файла конфигурации (файл ".htaccess"). Очевидно, что модуль перезаписи должен быть загружен внутри http-сервера и включен на хосте http. Если вы используете распределенный файл конфигурации, вам нужно позаботиться о том, чтобы его интерпретация была включена вообще в конфигурации хоста и чтобы он находился в папке DOCUMENT_ROOT хоста.

И общее замечание: вам всегда следует размещать такие правила в конфигурации хоста http-серверов, а не использовать распределенные файлы конфигурации (".htaccess"). Эти распределенные файлы конфигурации добавляют сложность, часто являются причиной неожиданного поведения, их трудно отладить, и они действительно замедляют работу http-сервера. Они предоставляются только в качестве последнего варианта для ситуаций, когда у вас нет доступа к реальной конфигурации хоста http-серверов (читай: действительно дешевые поставщики услуг) или для приложений, настаивающих на написании своих собственных правил (что является очевидным кошмаром безопасности).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...