htaccess и несколько доменов - PullRequest
       2

htaccess и несколько доменов

0 голосов
/ 15 декабря 2011

Сценарий. Я направляю несколько доменов с одного IP / компьютера и доставляю контент, который зависит от запрашивающего / исходного домена. Я не использую v-хосты, основанные на именах, потому что мне нужно поддерживать консолидированную базу кода, среди прочих разных причин. Мне также нужно создать файлы Sitemap для этих сайтов и поддерживать их отдельно. Моя дилемма в том, что я пытаюсь использовать htaccess для перенаправления всех запросов * sitemap.xml и * site_index.xml в подпапку, в которую входит запрашивающее доменное имя, например:

http://somedomain.com/sitemap.xml должен указывать на локальный каталог /var/www/html/sites/somedomain.com/sitemap.xml

или http://someotherdomain.com/sitemap.xml необходимо получить /var/www/html/sites/someotherdomain.com/sitemap.xml

Это также должно происходить без изменения адреса в адресной строке или перенаправления поисковых ботов и т. Д.

Я изучил все запросы * sitemap.xml к скрипту для извлечения и предоставления нужных данных, но это кажется громоздким и не таким элегантным, как директива htaccess. До сих пор я произвел:

RewriteCond $ 1! = Сайты RewriteRule ^ ([^ /] +) / sitemap.xml $ sites /% {HTTP_HOST} /sitemap.xml [L]

, которая не приводит к ошибке и не приводит к желаемому эффекту. Есть предложения?

ОБНОВЛЕНИЕ: я смог использовать прилагаемые директивы Яцека и несколько изменить их, чтобы добиться того, чего я добился. Вот чем я закончил:

RewriteRule ^sitemap.xml$ sites/%{HTTP_HOST}/sitemap.xml [L]

Ответы [ 2 ]

1 голос
/ 15 декабря 2011

Вот более общий ответ для одновременной работы с несколькими веб-сайтами: используйте mapfile .

Сначала я бы предложил назвать папку, как все "партнеры" или "сайты"." без расширения.

Создайте mapfile , в который вы поместите все" партнеры "или" сайты "без расширения:

RewriteMap mappartners \
  dbm:/web/htdocs/one_for_all/rewriterules/partners.map

Inmap-файл создает простые записи, такие как:

somedomain           one_for_all/somedomain
someotherdomain      one_for_all/someotherdomain
someotherotherdomain one_for_all/someotherotherdomain
...

Затем перейдем к сложной части:

# Make a RewriteCond that fills "%1" with the name of the partner...
RewriteCond %{HTTP_HOST} ^(www\.)?([a-zA-Z0-9\-]+)\.+(fr|com|net|org|eu)$
# ...make a RewriteRule that does nothing but initialize "partner" variable:
RewriteRule (.*) - [QSA,E=PARTNER:${mappartners:%2|notfound}]
# If empty or "notfound"
RewriteCond %{ENV:PARTNER} ^$ [OR]
RewriteCond %{ENV:PARTNER} notfound
# "not found" 404 :
RewriteRule . - [R=404,L]

Таким образом, все динамично, но немного сложнее.

... и закончите с полной переписью места назначения:

RewriteCond %{DOCUMENT_ROOT}/%{ENV:PARTNER}/%{REQUEST_FILENAME}  -f
# File exists => rewrite filename and end rewriterule:
RewriteRule  ^(.+) %{DOCUMENT_ROOT}/%{ENV:PARTNER}/%{REQUEST_FILENAME} [QSA,L]

- В качестве заметки, у меня есть куча RewriteRules, как эта, и мой третий фреймворк (который вы увидитена моем будущем сайте через несколько дней (http://papdevis.fr)) - один из самых быстрых.

Olivier

0 голосов
/ 15 декабря 2011

это должно примерно работать:

RewriteCond %{HTTP_HOST} !^(.*)$ [NC]
RewriteRule ^sitemap.xml$ %1/sitemap.xml [L]

где .htaccess в основной папке, а someotherdomain.com - это подпапка

$ 1 и т. Д. - это регулярные выражения для RewriteRule, а% 1-тип - для RewriteCond

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