Я схожу с ума от правила перезаписи Apache.
По сути, я хочу переписать любой URL-адрес, например:
http[s]://www.example.com/something
к
https://www.example.com
У меня есть VHost на apache, например:
<VirtualHost *:80>
ServerName example.com
ServerAlias example
DocumentRoot /var/www/html/example_courtesy
ServerAdmin webmaster@example.com
RedirectMatch 404 /\.git
RedirectMatch 404 /\.svn
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /var/www/html/example_courtesy>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Require all granted
DirectoryIndex index.php indice.htm
</Directory>
RewriteEngine on
RewriteCond %{SERVER_PORT} !^443$
RewriteRule ^.*$ https://%{SERVER_NAME}%{REQUEST_URI} [L,R]
</VirtualHost>
<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerName example.com
ServerAlias example
DocumentRoot /var/www/html/example_courtesy
ServerAdmin webmaster@example.com
RedirectMatch 404 /\.git
RedirectMatch 404 /\.svn
[...]
Я попытался удалить [L] из первого правила и добавить правило перезаписи, подобное следующему, в *: 443 VirtualHost:
RewriteEngine on
RewriteCond %{SERVER_PORT} !^80$
RewriteRule ^.*$ https://%{SERVER_NAME} [L,R]
Я получаю цикл перезаписи, Firefox сообщает мне: «Страница не перенаправляется должным образом».
Я сделал много других попыток с правилами перезаписи, но безуспешно.
Мне удалось переписать только определенный URL, например https://www.example.com/specific-path к https://www.example.com с RedirectMatch, но я точно не этого хочу.
Какие-либо предложения?
Я искал здесь аналогичный вопрос, но не нашел решения моей конкретной проблемы.
У вашего RewriteCond для раздела * .443 есть очевидная проблема. HTTPS (обычно) работает на порте 443 (как показывает конфигурация VirtualHost), но ваше условие перезаписи говорит: «Если порт сервера не 80, перенаправьте на https: // ...».
Итак, нажмите на порт 443, запросите контент, получите команду перейти на 443, потому что вы не на 80. Это цикл. RewriteCond %{SERVER_PORT} !^443$
должно сработать.
Лично я предпочел бы использовать RewriteCond %{HTTPS} !=on
.