Сохранение существующих перенаправлений 301 вместе с перенаправлением с подстановочными знаками - PullRequest
1 голос
/ 27 января 2020

Я вручную перенаправил некоторые URL-адреса из домена A в домен B, например:

Redirect /abc123 https://domainB.com/abc/?page_url=12

Если любой пользователь введет domainA / abc123 , они попадут на domainB.com / abc /? page_url = 12 Теперь я хочу реализовать перенаправление с подстановочными знаками, например,

RewriteCond %{HTTP_HOST} !domainB.in$ [NC]
RewriteRule ^(.*)$ https://domainB.in/something/?page_url=1&eid=$1 [L,R=301]

, где пользователь может добавить любую строку после domainA.com/STRING, которая будет передана на domainB.com/ что-то /? eid = STRING

Как я могу сохранить существующие ручные перенаправления наряду с подстановочным перенаправлением без конфликта? Если возможно написать условие if-else в htaccess, как мне этого добиться?

1 Ответ

0 голосов
/ 27 января 2020

Redirect - это директива mod_alias, а RewriteRule - это директива mod_rewrite. Различные Apache модули работают независимо и в разное время во время запроса. Сначала запускается mod_rewrite, несмотря на очевидный порядок директив в файле конфигурации. Вам следует избегать смешивания перенаправлений из обоих модулей в одном и том же файле конфигурации, чтобы избежать таких конфликтов.

Преобразуйте существующие директивы Redirect, чтобы вместо них использовать mod_rewrite, и убедитесь, что большинство указанных перенаправлений c являются первыми.

Например:

RewriteEngine On

# Specific redirects
RewriteRule ^abc123$ https://domainB.com/abc/?page_url=12 [R=302,L]

# General redirect
RewriteCond %{HTTP_HOST} !domainB\.in [NC]
RewriteRule (.*) https://domainB.in/something/?page_url=1&eid=$1 [R=301,L]

Обратите внимание, что опубликованная вами директива Redirect, в которой явно не указан код состояния, по умолчанию будет перенаправлена ​​на 302 (временный).

Однако всегда желательно тестировать с 302 (временными) перенаправлениями, чтобы избежать проблем с кэшированием.

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