Перепишите правила для псевдонимов домена - PullRequest
1 голос
/ 05 июля 2011

Ситуация: у меня есть один (основной) домен с несколькими псевдонимами доменов, каждый из которых указывает на один и тот же сервер на основе Plesk (например, у меня example.com в качестве основного, с something.net, anotherone.co.uk, и несколько других как псевдонимы основной учетной записи домена).Это означает, что всякий раз, когда я вписываю имя домена в адресную строку любого из псевдонимов, оно переходит непосредственно к учетной записи основного домена (example.com).

Проблема: На основена доменном имени псевдонима (ов), у меня есть index.php, который перенаправляет каждый домен по-разному (например, запросы на домен А перенаправляет на корпоративный сайт, домен b переходит на сайт благодарности и т. д.), который прекрасно работает,но если каталог добавляется после URL домена (т. е. somealias.com/something), то он выдает ошибку 404 not found.

Я был бы очень признателен, если кто-то может мне помочь, - это (по возможности, один)) переписать набор правил, который по существу удалит ВСЕ конечные каталоги и / или запросы GET, и оставит только введенный базовый URL-адрес, так что сценарий php, находящийся в корневом каталоге документов основного домена, сможет взять на себя и обработать запрос соответствующим образом.

Как ни странно, я нигде не смог найти (простого) решения для этого.Это тот случай, когда нужно определить правило для каждого из псевдонимов в отдельности?

Ответы [ 3 ]

1 голос
/ 05 июля 2011

Попробуйте следующее,

#Options +FollowSymLinks
RewriteEngine on
RewriteCond %{HTTP_HOST} ^www.olddomain.com$[OR]
RewriteCond %{HTTP_HOST} ^olddomain.com$
RewriteRule ^(.*)$ http://www.newdomain.com/$1 [R=301,L] 
0 голосов
/ 08 августа 2014

Мне кажется, что все сайты размещены на одном сервере (возможно, с использованием одной и той же кодовой базы). Если ваш index.php является фронт-контроллером, вы можете перенаправить все в ваш index.php и решить в первых строках index.php, какой фронт-контроллер загрузить (например, backend.php).
Если вы не против вести список псевдонимов, вы можете определить хеш [alias] => path-to-front-controller.
Во фронт-контроллере основного домена вы проверяете псевдоним (например, с помощью $ _SERVER ['SERVER_NAME']) по хешу и загружаете соответствующий файл.
Вам придется добавлять и вводить хэш каждый раз, когда вы добавляете новый псевдоним. Если они не генерируются динамически, поддержание этого хэша не будет большой проблемой.

0 голосов
/ 05 июля 2011
RewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_URI} !=/
RewriteCond %{REQUEST_URI} !=/index.php
RewriteRule .* http://%{HTTP_HOST}/? [L]

Это будет принимать ВСЕ запросов, кроме корневой папки / (например, http://example.com/) или индексного файла (например, http://example.com/index.php), и перенаправлять их в корневую папку (например, http://example.com/some-url).будет перенаправлен на http://example.com/).

Возможно, вам придется заменить index.php файлом, который будет выполнен при попадании в корневую папку (Apache будет молча перезаписывать http://example.com/ на http://example.com/index.php (в зависимости отна ваши фактические настройки), поскольку для его выполнения необходим файл, в противном случае может отображаться ошибка).


В качестве альтернативы (возможно, даже лучше - зависит от ваших фактических настроек и требований), вы можете использовать этиправила - перенаправит только несуществующие URL .Поэтому, если у вас есть изображение meow.png на вашем сайте, эти правила позволят вам получить к нему доступ (http://example.com/meow.png):

RewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* http://%{HTTP_HOST}/? [L]

ОБНОВЛЕНИЕ: Если вы собираетесьчтобы поместить это в файл конфигурации (httpd-vhost.conf или httpd.conf), используйте следующие правила:

RewriteEngine On

RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} !-f
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} !-d
RewriteCond %{REQUEST_URI} !=/index.php
RewriteRule .* http://%{HTTP_HOST}/? [L]
...