Рейтинг:1

Корневая косая черта веб-сайта автоматически удалена (проблема)

флаг jp

согласно заголовку, когда я ввожу URL-адрес своего веб-сайта вручную (примеры в конце темы), завершающая косая черта в конце домена удаляется автоматически. У меня есть принудительное перенаправление SSL и включен Apache ModRewrite в .htaccess и это содержимое файла (как вы можете видеть, оно автоматически сгенерировано из Prestashop CMS (1.7.x)):

    # ~~start~~ Не удаляйте этот комментарий, Prestashop автоматически сохранит код вне этого комментария, когда .htaccess будет сгенерирован снова
# .htaccess автоматически генерируется решением PrestaShop для электронной коммерции с открытым исходным кодом
# http://www.prestashop.com - http://www.prestashop.com/forums
 
<IfModule mod_rewrite.c>
<IfModule mod_env.c>
SetEnv HTTP_MOD_REWRITE Вкл.
</ЕслиМодуль>
 
RewriteEngine включен
 
 
#Домен: www.example.com
Правило перезаписи. - [E=ПЕРЕЗАПИСАТЬ БАЗУ:/]
RewriteRule ^api(?:/(.*))?$ %{ENV:REWRITEBASE}webservice/dispatcher.php?url=$1 [QSA,L]
 
# Картинки
RewriteCond %{HTTP_HOST} ^www.example.com$
Правило перезаписи ^([0-9])(\-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ %{ENV:REWRITEBASE}img/ р/$1/$1$2$3.jpg [L]
RewriteCond %{HTTP_HOST} ^www.example.com$
Правило перезаписи ^([0-9])([0-9])(\-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ % {ENV:REWRITEBASE}img/p/$1/$2/$1$2$3$4.jpg [L]
RewriteCond %{HTTP_HOST} ^www.example.com$
Правило перезаписи ^([0-9])([0-9])([0-9])(\-[_a-zA-Z0-9-]*)?(-[0-9]+)?/ .+\.jpg$ %{ENV:REWRITEBASE}img/p/$1/$2/$3/$1$2$3$4$5.jpg [L]
RewriteCond %{HTTP_HOST} ^www.example.com$
Правило перезаписи ^([0-9])([0-9])([0-9])([0-9])(\-[_a-zA-Z0-9-]*)?(-[0 -9]+)?/.+\.jpg$ %{ENV:REWRITEBASE}img/p/$1/$2/$3/$4/$1$2$3$4$5$6.jpg [L]
RewriteCond %{HTTP_HOST} ^www.example.com$
Правило перезаписи ^([0-9])([0-9])([0-9])([0-9])([0-9])(\-[_a-zA-Z0-9-] *)?(-[0-9]+)?/.+\.jpg$ %{ENV:REWRITEBASE}img/p/$1/$2/$3/$4/$5/$1$2$3$4$5$6$7.jpg [ л]
RewriteCond %{HTTP_HOST} ^www.example.com$
Правило перезаписи ^([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])(\-[_a- zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ %{ENV:REWRITEBASE}img/p/$1/$2/$3/$4/$5/$6/$1 $2$3$4$5$6$7$8.jpg [L]
RewriteCond %{HTTP_HOST} ^www.example.com$
Правило перезаписи ^([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])([0-9] )(\-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ %{ENV:REWRITEBASE}img/p/$1/$2/$3/ $4/$5/$6/$7/$1$2$3$4$5$6$7$8$9.jpg [L]
RewriteCond %{HTTP_HOST} ^www.example.com$
Правило перезаписи ^([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])([0-9] )([0-9])(\-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ %{ENV:REWRITEBASE}img/p /$1/$2/$3/$4/$5/$6/$7/$8/$1$2$3$4$5$6$7$8$9$10.jpg [L]
RewriteCond %{HTTP_HOST} ^www.example.com$
RewriteRule ^c/([0-9]+)(\-[\.*_a-zA-Z0-9-]*)(-[0-9]+)?/.+\.jpg$ %{ENV :REWRITEBASE}img/c/$1$2$3.jpg [L]
RewriteCond %{HTTP_HOST} ^www.example.com$
Правило перезаписи ^c/([a-zA-Z_-]+)(-[0-9]+)?/.+\.jpg$ %{ENV:REWRITEBASE}img/c/$1$2.jpg [L]
# AlphaImageLoader для IE и fancybox
Правило перезаписи ^images_ie/?([^/]+)\.(jpe?g|png|gif)$ js/jquery/plugins/fancybox/images/$1.$2 [L]
 
# Диспетчер
RewriteCond %{REQUEST_FILENAME} -s [ИЛИ]
RewriteCond %{REQUEST_FILENAME} -l [ИЛИ]
RewriteCond %{REQUEST_FILENAME} -d
Правило перезаписи ^.*$ - [NC,L]
RewriteRule ^.*$ %{ENV:REWRITEBASE}index.php [NC,L]
</ЕслиМодуль>
 
Приложение AddType/vnd.ms-fontobject .eot
Шрифт AddType/ttf .ttf
Шрифт AddType/otf .otf
Приложение AddType/шрифт-woff .woff
Шрифт AddType/woff2 .woff2
<IfModule mod_headers.c>
<FilesMatch "\.(ttf|ttc|otf|eot|woff|woff2|svg)$">
Набор заголовков Access-Control-Allow-Origin "*"
</FilesMatch>
</ЕслиМодуль>
 
#Если мод перезаписи не включен
Документ об ошибке 404 /index.php?controller=404
 
# ~~end~~ Не удаляйте этот комментарий, Prestashop автоматически сохранит код вне этого комментария, когда .htaccess будет сгенерирован снова

Примеры:

 - www.example.com/contacts -> https://www.example.comcontacts [НЕПРАВИЛЬНО]   
 - example.com/contacts -> https://www.example.comcontacts [НЕВЕРНО]
 - http://example.com/contacts -> https://www.example.comcontacts [НЕВЕРНО]
   
 - https://example.com/contacts -> https://www.example.com/contacts [ОК]
 - https://www.example.com/contacts -> https://www.example.com/contacts [ОК]

Любая помощь приветствуется.

флаг kz
Пожалуйста, включите содержимое вашего файла `.htaccess` в свой вопрос, а не в качестве внешней ссылки. Также включите соответствующие примеры, в противном случае опубликованный вопрос не является вопросом.
флаг kz
«У меня принудительное перенаправление SSL» — что это значит? Где это? Его нет в связанном файле `.htaccess`. На самом деле, в опубликованном вами коде нет никаких «перенаправлений»? Из ваших примеров видно, что проблема может заключаться в перенаправлении с HTTP на HTTPS (т. е. «принудительном перенаправлении SSL» — что бы это ни было).
флаг jp
@MrWhite, под «принудительным перенаправлением SSL» я имею в виду функцию в CMS, которая позволяет использовать SSL для всех страниц веб-сайта. Вы правы, в этом .htaccess нет перенаправления SSL для всех http-запросов. Как вы думаете, может ли это быть проблемой? Как мне добавить его в свой .htaccess?
Рейтинг:0
флаг kz

Как упоминалось в комментариях, в опубликованной вами конфигурации нет ничего, что могло бы вызвать это. В выложенном вами конфиге вообще нет редиректов. Скорее всего, это ошибка конфигурации вашей CMS (Prestashop).

Проблема, по-видимому, связана с перенаправлением HTTP на HTTPS, которое удаляет косую черту в начале URL-пути (сразу после имени хоста).

Однако вы можете «обойти» эту проблему, реализовав перенаправление с HTTP на HTTPS (и без www на www) в .htaccess - что происходит до того, как ваша CMS сможет что-либо сделать. Таким образом, вашей CMS не нужно перенаправлять запрос.

Например, если у вас есть достаточно стандартный сервер, где SSL управляется сервером приложений (без SSL-прокси, такого как Cloudflare и т. д.), вы можете сделать что-то вроде следующего в самом верху .htaccess файл, перед # ~~старт~~ комментарий.

# Перенаправление без www на www + HTTPS
RewriteCond %{HTTP_HOST} ^(пример\.com) [NC]
RewriteRule ^ https://www.%1%{REQUEST_URI} [R=301,L]

# Перенаправление HTTP на HTTPS (остальные запросы)
RewriteCond %{HTTPS} = выкл.
RewriteRule ^ https://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

NB: сначала проверьте с 302 (временной) переадресацией, чтобы избежать потенциальных проблем с кэшированием.


ОБНОВИТЬ:

Я попытался добавить строки, которые вы написали выше, но ничего не изменилось.

Это будет означать, что у вас есть искаженный HTTP на HTTPS в самой конфигурации сервера (который выполняется до .htaccess)

<VirtualHost *:80>
ServerName www.example.com
Redirect permanent / https://www.example.com
</VirtualHost>

Если это ваша фактическая конфигурация, то вам не хватает завершающей косой черты в целевом URL-адресе! Это приведет к неправильному перенаправлению (отсутствует косая черта после домена), которое вы видите.

Должен быть:

Перенаправление постоянное / https://www.example.com/

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

флаг jp
Большое спасибо за помощь и за объяснение. Я попытался добавить строки, которые вы написали выше, но ничего не изменилось. Правила были выполнены, потому что я вижу, что протокол HTTP изменен на HTTPS, но корневая косая черта веб-сайта была удалена. На данный момент должна быть проблема с конфигурацией CMS, верно?
флаг kz
@simone_meh Но если вы запрашиваете URL-адрес HTTPS напрямую, он работает нормально! Это будет означать, что у вас неправильно сформированный HTTP-HTTPS в самой конфигурации сервера (который выполняется до `.htaccess`)? У вас есть доступ к конфигу сервера?
флаг jp
конечно, я на Linux VPS. ``` Имя сервера www.example.com Перенаправление постоянное / https://www.example.com ``` Отсутствующая косая черта при постоянном перенаправлении может быть проблемой?
флаг kz
@simone_meh Это похоже на ошибку перенаправления сервера (если только что-то не пропущено в комментарии). Вам не хватает косой черты в конце целевого URL!? Я обновил свой ответ.
флаг jp
Решено! Спасибо огромное!

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.