правило перезаписи apache2: удалить любой путь из URL-адреса

Я Я схожу с ума от правила перезаписи на 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 , но это не то, что я определенно хочу.

Есть предложения?

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

0
задан 11 May 2016 в 21:17
1 ответ

Ваш RewriteCond для раздела * .443 имеет очевидную проблему. HTTPS (обычно) работает на порте 443 (как показывает конфигурация VirtualHost), но ваше условие перезаписи говорит: «Если порт сервера не 80, перенаправьте на https: // ...».

Итак, нажмите на порт 443, запросите контент, получите команду перейти на 443, потому что вы не на 80. Это цикл. RewriteCond% {SERVER_PORT}! ^ 443 $ должен работать.

Лично я бы предпочел использовать RewriteCond% {HTTPS}! = На .

2
ответ дан 4 December 2019 в 13:41

Теги

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