Перенаправление .htaccess не работает в Ubuntu - PullRequest
1 голос
/ 05 февраля 2020

Чтобы удалить несколько слешей, я написал это условие, которое работает в windows системе, но не в Ubuntu 18.04. Я не знаю, почему ..?

RewriteCond %{HTTP_HOST} !=""
RewriteCond %{THE_REQUEST} ^[A-Z]+\s//+(.*)\sHTTP/[0-9.]+$
RewriteRule .* %{HTTP_HOST}/%1 [R=301,L]

Я получаю эту ошибку в системе Ubuntu. ..

Запрещено
У вас нет прав для доступа к этому ресурсу.

И мой URL изменил это

http://in.decashop.localhost/p/8489882_500-boys-gym-short-sleeved-t-shirt-grey.html

на это

http://in.decashop.localhost/var/www/html/decashopglobal/www/in.decashop.localhost/p/8489882_500-boys-gym-short-sleeved-t-shirt-grey.html

, если я поставлю несколько слешей вроде

http://in.decashop.localhost///p/8489882_500-boys-gym-short-sleeved-t-shirt-grey.html

Ответы [ 3 ]

0 голосов
/ 05 февраля 2020
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, чтобы избежать проблем с кэшированием в будущем.)

0 голосов
/ 06 февраля 2020

Это правило сработало для меня ..

RewriteBase /
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/+(.*?)/+(/[^\s]+) [NC]
RewriteRule ^ %1%2 [R=302,L,NE]

Спасибо всем.

0 голосов
/ 05 февраля 2020

Сначала вы можете проверить журнал apache. попробуйте зайти на ваш сайт, используя URL или IP, и проверьте информацию журнала * вашего веб-сервера .

В Ubuntu вы можете попробовать:

sudo tail -f /var/log/apache2/error.log

В большинстве случаев неправильное разрешение является основной причиной эта проблема.

...