Мой файл конфигурации настроен так:
<VirtualHost *:80>
RewriteEngine on
RewriteCond %{HTTPS} off
RewriteRule (.*) https://example.com/%$1 [R,L]
</VirtualHost>
<VirtualHost *:443>
ServerAdmin webmaster@localhost
DocumentRoot /ssd/www/
SSLEngine on
SSLCertificateFile /ssd/certs/example_com.crt
SSLCertificateKeyFile /ssd/certs/example_com.key
SSLCertificateChainFile /ssd/certs/example_com.ca-bundle
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
Проблема в том, что при переходе на стандартную HTTP-страницу при перенаправлении она добавляет /%25/
в домен, например ..
http://example.com
изменен на https://example.com/%25/
и http://example.com/my-category/my-page
изменен на https://example.com/%25/my-category/my-page
.
Maybelline 4 должен быть:
RewriteRule (.*) mydomain.com/$1 [R,L]
% 25 - это значение% в кодировке URL
Как уже отмечал Викелидис, %$1
ошибочен. Однако у вас есть другие проблемы, которые также следует решить.
В RewriteCond
проверка директивы для HTTPS (например, порт 443) в VirtualHost
порт 80 является избыточным и должен быть удален.
Кроме того, при использовании в конфигурации сервера RewriteRule
шаблон соответствует полному URL-пути, который включает префикс косой черты. Ваша замена приведет к двойному слешу. Apache сворачивает это позже, чтобы разрешить запрос, однако в некоторых случаях он все еще доступен, поэтому может нарушить более поздние правила.
Это перенаправление также должно быть постоянным 301, а не временным 302 (по умолчанию), но меняйте его только тогда, когда вы уверены, что он работает нормально.
Итак, если вы используете mod_rewrite, это должно быть записано как:
<VirtualHost *:80>
RewriteEngine on
RewriteRule /(.*) https://example.com/$1 [R=301,L]
</VirtualHost>
Опять же, здесь вам вообще не нужен mod_rewrite. Mod_alias Redirect
было бы более эффективно:
<VirtualHost *:80>
Redirect 301 / https://example.com/
</VirtualHost>