в соответствии с заголовком, когда я ввожу 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]
Любая помощь приветствуется.
Как упоминалось в комментариях, в опубликованной вами конфигурации нет ничего, что могло бы вызвать это. В выложенном вами конфиге вообще нет редиректов. Скорее всего, это ошибка конфигурации вашей 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/
Перед тестированием вам необходимо убедиться, что кеш браузера чист, так как ошибочное перенаправление будет закэшировано.