htaccess RewriteRule для поддоменов - PullRequest
       24

htaccess RewriteRule для поддоменов

1 голос
/ 21 сентября 2011

Скажите, у меня есть следующий сайт:

http://example.com/site

то же самое, что и

http://site.example.com

Мне было интересно, смогу ли я получить что-то подобное

http://site.example.com/var/

с использованием mod_rewrite в apache2.


Вот моя попытка:

RewriteEngine on
RewriteRule ^([^/\.]+)$ /site/?var=$1

это работает как талисман, когда URL-адрес http://example.com/site,, но, поскольку я только начинающий, я не знаю, как заставить это работать для http://site.example.com.

Любая помощь будет очень признательна.

Ответы [ 2 ]

3 голосов
/ 01 октября 2011

Перенаправление первой части example.com/site/var на site.example.com/var. Второе правило перезаписи, переписать свой URL в site.example.com,

RewriteEngine on
RewriteBase /
RewriteCond %{HTTP_HOST}%{REQUEST_URI}   ^(www\.)?example.com/site/(.*)
RewriteRule  (.*)  http://site.example.com/%1  [R=301,L]

RewriteRule ^([^/\.]+)$ /site/?var=$1 [L]

Объяснение:
ПереписатьEngine на
эта строка включает перезапись двигателя. иначе это может не сработать.
RewriteBase /
эта строка устанавливает базу перезаписи. эта директива используется, когда вы хотите установить базовый URL для перезаписей для каждого каталога. значением по умолчанию является текущий физический путь, но в большинстве случаев URL-база в НЕ напрямую связана с физическими путями к именам файлов, поэтому использовать по умолчанию неправильно. Например, при использовании виртуального каталога вы должны правильно установить эту опцию, чтобы mod_rewrite действовал хорошо.

RewriteCond% {HTTP_HOST}% {REQUEST_URI} ^ (www.)? Example.com/site/(.*)
в этой строке первый apache присоединяется к переменной (адрес хоста: www.example.com и URI запроса: /site/var). тогда это проверяет результат с образцом, который я дал. первый результат может быть www. . после этого должно быть example.com/site/ и в конце может быть что угодно.

RewriteRule  (.*)  http://site.example.com/%1  [R=301,L]


эта строка перенаправляет запрос пользователя на http://site.example.com/%1 с кодом статуса 301. поскольку у него есть флаг L, это последнее правило перезаписи проверки Apache. %1 - это все, что помечено (.*) в состоянии перезаписи.

RewriteRule ^([^/\.]+)$ /site/?var=$1 [L]


эта строка является строкой, которую вы задали в своем вопросе: она перезаписывает каждый URL, который не имеет / и имеет точку /site/?var=$1.

1 голос
/ 28 сентября 2011

Я нашел решение:

RewriteBase /

Некоторые хосты нуждаются в спецификации RewriteBase, чтобы работать хорошо. Надеюсь, это поможет.

...