Я Я схожу с ума от правила перезаписи на 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/ конкретный путь к https://www.example.com с RedirectMatch , но это не то, что я определенно хочу.
Есть предложения?
Я искал здесь аналогичный вопрос, но не нашел решения моей конкретной проблемы.
Ваш RewriteCond для раздела * .443 имеет очевидную проблему. HTTPS (обычно) работает на порте 443 (как показывает конфигурация VirtualHost), но ваше условие перезаписи говорит: «Если порт сервера не 80, перенаправьте на https: // ...».
Итак, нажмите на порт 443, запросите контент, получите команду перейти на 443, потому что вы не на 80. Это цикл.
RewriteCond% {SERVER_PORT}! ^ 443 $
должен работать.
Лично я бы предпочел использовать RewriteCond% {HTTPS}! = На
.