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

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

    # ~~start~~ Do not remove this comment, Prestashop will keep automatically the code outside this comment when.htaccess will be generated again
#.htaccess automaticaly generated by PrestaShop e-commerce open-source solution
# http://www.prestashop.com - http://www.prestashop.com/forums
 
<IfModule mod_rewrite.c>
<IfModule mod_env.c>
SetEnv HTTP_MOD_REWRITE On
</IfModule>
 
RewriteEngine on
 
 
#Domain: www.example.com
RewriteRule. - [E=REWRITEBASE:/]
RewriteRule ^api(?:/(.*))?$ %{ENV:REWRITEBASE}webservice/dispatcher.php?url=$1 [QSA,L]
 
# Images
RewriteCond %{HTTP_HOST} ^www.example.com$
RewriteRule ^([0-9])(\-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ %{ENV:REWRITEBASE}img/p/$1/$1$2$3.jpg [L]
RewriteCond %{HTTP_HOST} ^www.example.com$
RewriteRule ^([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$
RewriteRule ^([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$
RewriteRule ^([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$
RewriteRule ^([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 [L]
RewriteCond %{HTTP_HOST} ^www.example.com$
RewriteRule ^([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$
RewriteRule ^([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$
RewriteRule ^([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$
RewriteRule ^c/([a-zA-Z_-]+)(-[0-9]+)?/.+\.jpg$ %{ENV:REWRITEBASE}img/c/$1$2.jpg [L]
# AlphaImageLoader for IE and fancybox
RewriteRule ^images_ie/?([^/]+)\.(jpe?g|png|gif)$ js/jquery/plugins/fancybox/images/$1.$2 [L]
 
# Dispatcher
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ %{ENV:REWRITEBASE}index.php [NC,L]
</IfModule>
 
AddType application/vnd.ms-fontobject.eot
AddType font/ttf.ttf
AddType font/otf.otf
AddType application/font-woff.woff
AddType font/woff2.woff2
<IfModule mod_headers.c>
<FilesMatch "\.(ttf|ttc|otf|eot|woff|woff2|svg)$">
Header set Access-Control-Allow-Origin "*"
</FilesMatch>
</IfModule>
 
#If rewrite mod isn't enabled
ErrorDocument 404 /index.php?controller=404
 
# ~~end~~ Do not remove this comment, Prestashop will keep automatically the code outside this comment when.htaccess will be generated again

Примеры:

 - www.example.com/contacts -> https://www.example.comcontacts [WRONG]   
 - example.com/contacts -> https://www.example.comcontacts [WRONG]
 - http://example.com/contacts -> https://www.example.comcontacts [WRONG]
   
 - https://example.com/contacts -> https://www.example.com/contacts [OK]
 - https://www.example.com/contacts -> https://www.example.com/contacts [OK]

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

1
задан 30 September 2021 в 14:33
1 ответ

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

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

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

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

# Redirect non-www to www + HTTPS
RewriteCond %{HTTP_HOST} ^(example\.com) [NC]
RewriteRule ^ https://www.%1%{REQUEST_URI} [R=301,L]

# Redirect HTTP to HTTPS (remaining requests)
RewriteCond %{HTTPS} =off
RewriteRule ^ https://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

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


ОБНОВЛЕНИЕ:

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

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


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

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

Должно быть так:

Redirect permanent / https://www.example.com/

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

0
ответ дан 30 September 2021 в 15:54

Теги

Похожие вопросы