RewriteCond %{HTTP_HOST} !=""
RewriteCond %{THE_REQUEST} ^[A-Z]+\s//+(.*)\sHTTP/[0-9.]+$
RewriteRule .* %{HTTP_HOST}/%1 [R=301,L]
Вывод, который вы видите, соответствует опубликованным вами директивам, так как вам не хватает схемы (ie. http
) на замена строка в директиве RewriteRule
(которая предположительно должна быть абсолютный URL) - поэтому я не вижу, как это "сработало бы" на сервере Windows? Если у вас не было совсем другого конфига (но даже тогда он не мог работать одинаково).
С директивой RewriteRule
, как написано, строка substitution (ie) . %{HTTP_HOST}/%1
) будет выглядеть как относительный URL, а Apache добавит обратно префикс каталога ie. /var/www/html/decashopglobal/www/
до выдачи перенаправления - что, естественно, приводит к неправильному перенаправлению, которое вы видите. Если бы вы установили директиву RewriteBase
в другом месте в файле конфигурации, то это могло бы переопределить это поведение (хотя все равно не дало бы результат, который вы ожидаете).
Также обратите внимание, что эти директивы предназначены для удаления нескольких слэшей из start только URL-пути, но не где-либо в URL-пути.
Таким образом, вам нужно изменить директиву RewriteRule
, чтобы она читалась :
RewriteRule ^ http://%{HTTP_HOST}/%1 [R=301,L]
ИЛИ, полностью удалить серверную переменную HTTP_HOST
(для подстановки string root):
RewriteRule ^ /%1 [R=301,L]
перед тестированием необходимо очистить кэш браузера, так как перенаправления erroneosu 301 (постоянные) будут постоянно кэшироваться браузером. (Протестируйте 302, чтобы избежать проблем с кэшированием в будущем.)