Назад | Перейти на главную страницу

Правило перезаписи 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/specific-path к https://www.example.com с RedirectMatch, но я точно не этого хочу.

Какие-либо предложения?

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

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

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

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