Apache Rewrite: вторичный htaccess для домена RedirectMatch - PullRequest
1 голос
/ 18 февраля 2012

На общем веб-хостинге мое программное обеспечение поддерживает несколько доменов (все домены указывают на один и тот же корневой каталог public_html).

Что я хочу сделать, так это сохранить перенаправления (и любые RedirectMatch) на своем собственном узле /выделенный файл .htaccess.

Визуально структура каталогов выглядит следующим образом ...

/ public_html / (все домены указаны внутри этого каталога)

/public_html / .htaccess

/ public_html / www.example1.com /

/ public_html / www.example2.com /

/ public_html / www.example3.com /

Есть два подхода, которые я рассматриваю, хотя я был бы признателен за мнение других:

Первый - не допускать перенаправления, зависящие от домена, из основного файла .htaccess, как определено выше.Поэтому я бы хотел, чтобы перенаправления обрабатывались файлами .htaccess, как указано ниже, если это возможно ...

/ public_html / www.example1.com / .htaccess

/public_html / www.example2.com / .htaccess

/ public_html / www.example3.com / .htaccess

... если это невозможно, я соглашусь напереписать в файл PHP, чтобы вместо этого перенаправить перенаправления в PHP.Я полагаю, что это не так ориентировано на производительность, хотя, с другой стороны, это дало бы мне возможность регистрировать перенаправления и видеть, сколько времени уходит на их выравнивание.

Некоторые пояснения:

  1. Я использую общий веб-хостинг, поэтому все, что связано с Apache, необходимо выполнять только через файлы .htaccess.

  2. В главном файле .htaccess нет перенаправлений / совпадений.и никогда не будет, поскольку два домена могут в конечном итоге попытаться использовать один и тот же редирект.

1 Ответ

3 голосов
/ 18 февраля 2012

Поскольку вы находитесь на общедоступном хосте, вы не можете позволить себе иметь какие-либо решения, касающиеся файлов conf (что, кстати, лучше).Так что не потрудитесь перечислить их.Лучший способ сделать это - это:

Код был написан с учетом того, что ни один из доменов не разделяет какие-либо файлы / данные на сервере.Каждый файл / данные, относящиеся к домену, хранятся в папке, имя которой совпадает с именем домена.

Проверяется приведенный ниже код (как статический, так и нестатический):

RewritEngine on
RewriteBase /

RewriteCond %{ENV:REDIRECT_STATUS} 200
RewriteRule ^ - [L]

И добавьте любое из следующего к вышеприведенному:

для статического выполнения:

RewriteCond %{HTTP_HOST} ^www\.(example1|example2|example3)(\.com)$ [NC]
RewriteRule ^(.*)$ /www.%1%2/$1 [L]

для статического выполнения: а также если выхотите получить доступ к сайту без www

RewriteCond %{HTTP_HOST} ^(www\.)?(example1|example2|example3)(\.com)$ [NC]
RewriteRule ^(.*)$ /%1%2%3/$1 [L]

для не статически сделать это: это лучшее решение

RewriteRule ^(.*)$ /%{HTTP_HOST}/$1 [L]

Всевыше будет перенаправить URI в папку их конкретного домена.Все другие специфичные для домена переписывания могут быть обработаны в соответствующих папках.

Если у вас есть URI без www, то есть example1.com измените ^www\.(example1|example2|example3)(\.com)$ на ^(www\.)?(example1|example2|example3)(\.com)$

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...