RewriteCond %{HTTP_HOST} ^test\.example\.com/$ [NC]
RewriteRule ^(.*)$ https://example.com/test-path/$1 [R=302,L]
Я предполагаю, что это просто опечатка в вашем вопросе (?), Но у вас есть ошибочная косая черта в конце имени вашего хоста - это никогда не будет совпадать.
Чтобы избежать дублирования /test-path
, когда оно присутствует в запрошенном URL-адресе, но все еще перенаправлено на /test-path
, вы можете зафиксировать его как необязательный URL-путь, который затем отбрасывается, если он совпадает.Например:
RewriteCond %{HTTP_HOST} ^test\.example\.com [NC]
RewriteRule ^(?:test-path/)?(.*) https://example.com/test-path/$1 [R=302,L]
Я удалил косую черту и завершающий $
на CondPattern , чтобы он совпадал (и, следовательно, канонизировался) с полным доменным именем, заканчивающимся точкой.
(?:test-path/)?
- это группа без захвата (поэтому обратная ссылка не создается), которая захватывает test-path/
.Затем эта группа становится необязательной с конечным ?
.
В стороне:
RewriteCond %{REQUEST_URI} !/test-path/
RewriteCond %{HTTP_HOST} ^test\.example\.com/$ [NC]
RewriteRule ^(.*)$ https://example.com/test-path/$1 [R=302,L]
Это ничего не изменит, если /test-path/
присутствует в любом месте запрошенного URL.Так что, если вы видите перенаправление, тогда может показаться, что «что-то еще» делает это!
С этой последней попыткой, вам также не важно, содержит ли URL-адрес /test-path/
совсем.В любом случае, он все еще перенаправляет.
Как я уже сказал, что-то еще должно делать это.Возможный конфликт с другими директивами возможно?Смешиваете ли вы перенаправления из mod_alias и mod_rewrite?
Обратите внимание, что эти перенаправления должны идти вверху файла .htaccess
.