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

Правило перезаписи для перенаправления всех подстраниц на одну страницу?

У меня есть два двух файла /etc/apache2/sites-available/foo и /etc/apache2/sites-available/foo_maintenance

Правило перезаписи, которое я использую в /etc/apache2/sites-available/foo является

<Directory /var/www/public_html>
        Options +FollowSymlinks
        RewriteOptions inherit
        RewriteEngine on
        #
        RewriteCond %{HTTP_HOST} ^mysite\.com [NC]
        RewriteRule ^(.*)$ http://www.mysite.com/$1 [R=301,L]
</Directory>

так что все mysite.com/* перенаправить на www.mysite.com

После того, как я отключил свой сайт на обслуживание, если пользователь переходит на подстраницу сайта, например mysite.com/subdir/something.php, я хотел бы перенаправить их на www.mysite.com, чтобы index.html обслуживания страница будет отображаться.

Какое правило перезаписи перенаправляет весь трафик с любой подстраницы на www.mysite.com?

Вы можете пойти с чем-то вроде этого:

RewriteEngine on
RewriteCond %{HTTP_HOST} ^mysite\.com [NC]
RewriteCond %{REQUEST_URI} !^/$ [NC]
RewriteRule ^.*$ http://www.mysite.com/ [L]
  • Строка 1 включает механизм перезаписи в этом контексте.
  • Строка 2 проверяет, отправлен ли запрос на mysite.com.
  • Строка 3 проверяет, не существует ли запрошенный URI. /.
  • Строка 4 перенаправляет все адреса на http://www.mysite.com/.
RewriteRule ^(.*)$ http://www.mysite.com/$1 [R=301,L]

RewriteRules состоит из трех частей. Шаблон для сопоставления, замена и флаги. Шаблон в этом случае ^(.*)$. В ^ представляет начало строки, а $ представляет конец строки. В . представляет любой символ, а * следование за ним означает, что это может происходить любое количество раз. Теперь круглые скобки определяют группу захвата, которая по сути хранит все, что происходит между скобками. Затем эти группы захвата доступны для использования при замене. Итак, если запрос предназначен для /subdir/something.php, то первая группа захвата будет содержать "/subdir/something.php".

Замена в этом случае http://www.mysite.com/$1, а $1 представляет первую группу захвата в соответствующем шаблоне. Целевой URL-адрес формируется путем заполнения этих групп захвата, что в этом случае даст http://www.mysite.com/subdir/something.php.

Итак, если вы хотите всегда отправлять пользователей в корень www.mysite.com независимо от пути, который они запросили, вам просто нужно не заполнять путь в замене, то есть путем удаления $1 часть. Ваше окончательное правило будет выглядеть так:

RewriteRule ^(.*)$ http://www.mysite.com/ [R=301,L]