#apache #.htaccess #url #redirect
#apache #.htaccess #url #перенаправление
Вопрос:
Я пытаюсь перенаправить один полный URL-адрес
But this is not working ...
Комментарии:
1. Ваш RewriteCond никогда не будет совпадать, потому
https://www.moccioso.com/d.php? id=ultimateselection.zip
что это не имя хоста.2. Какое лучшее решение поможет мне достичь этого? С вашей точки зрения
Ответ №1:
RewriteCond %{HTTP_HOST} ^https://www.moccioso.com/d.php? id=ultimateselection.zip$ RewriteRule ^$ http://moccioso.com/sd_product/ultimateselection-zip [L,R=301]
(Я предполагаю, что вы не упаковали код в несколько строк в своем реальном коде?)
HTTP_HOST
Переменная содержит заголовок Host
HTTP-запроса. т.е. имя хоста, указанное в запросе, например. www.example.com
только — здесь нет схемы, URL-пути или строки запроса. Таким образом, эта RewriteCond
директива никогда не будет соответствовать.
Но вы также пытаетесь сопоставить пустой URL-путь с RewriteRule
шаблоном ^$
— так что, опять же, это никогда не будет соответствовать. В вашем примере URL-путь равен /d.php
. RewriteRule
Шаблон соответствует только URL-пути.
Вы также перенаправляете на http
(не https
) в этой директиве? В вашем примере используется https
. Вы также удаляете www
поддомен, но опять же, ваш пример включает его?
Если вы перенаправляете с / на одно и то же имя хоста и имеете только один домен, вам не нужно явно указывать доменное имя (т.е. запрошенное имя хоста) в правиле.
Чтобы сопоставить со строкой запроса, вам необходимо сопоставить с переменной QUERY_STRING
сервера.
Вместо этого попробуйте выполнить следующее, расположенное в верхней части вашего .htaccess
файла.
RewriteCond %{QUERY_STRING} ^id=ultimateselection.zip$
RewriteRule ^d.php$ /sd_product/ultimateselection-zip [R=301,L]
Это должно быть в верхней части вашего .htaccess
файла. Сначала протестируйте 302 (временное) перенаправление, чтобы избежать потенциальных проблем с кэшированием.
Очистите кэш вашего браузера перед тестированием.