mod_rewrite с двумя серверами и тремя поддоменами? - PullRequest
1 голос
/ 15 ноября 2011

Я искал вокруг (и здесь, и в Google), и я не могу найти ответ, который действительно работает для меня. По сути, у меня есть два физических сервера (dev-сервер и рабочий сервер), и я хочу иметь возможность использовать один файл .htaccess в моем git-репо.

Обычно это не сложно, но у меня есть два домена: example.com и longexample.com. Я установил longexample.com и dev.longexample.com для CNAME на example.comdev.example.com) на своем хосте DNS и установил apache ServerName / ServerAlias ​​на обоих серверах:

dev server:
    ServerName dev.example.com
    ServerAlias dev.longexample.com

prod server:
    ServerName example.com
    ServerAlias longexample.com
    ServerAlias www.example.com
    ServerAlias www.longexample.com

Вот мой файл .htaccess:

Options +FollowSymlinks +Indexes
RewriteEngine on

# RewriteCond %{HTTP_HOST} ^www.longexample.com$ [NC,OR]
# RewriteCond %{HTTP_HOST} ^longexample.com$ [NC,OR]
# RewriteCond %{HTTP_HOST} ^www.example.com$ [NC]
# RewriteRule ^(.*)$ http://example.com/$1 [R,N]

RewriteCond %{HTTP_HOST} ^dev\.longexample\.com$ [NC]
RewriteRule ^(.*)$ http://dev.example.com/$1 [R,L]

RewriteRule ^([^\.]+)$ $1.html [NC,L]
RewriteCond %{THE_REQUEST} ^GET\ ([^\.]+)\.(html|htm) [NC]
RewriteRule ^([^\.]+)\.(html|htm)$ %1 [R,NC,L]

Предположительно, первые два блока должны переписать prod и dev для правильных URL (я сделаю их 301, когда все будет работать), но, похоже, это не работает. Как сейчас, ничего не делает. Если я установлю RewriteRule на [N] вместо [L], это даст мне бесконечный цикл.

Первый блок закомментирован, потому что, если я получу его на dev-сервере, решение для prod должно быть очевидным. Последний блок делает запрос на перенаправление example.com/about.html на example.com/about (при этом все еще используется файл /about.html. Эта часть работает нормально.

Есть ли проблемы с использованием двух доменов? Я также попытался использовать %{SERVER_NAME} вместо %{HTTP_HOST}, но ничего не изменилось.

1 Ответ

1 голос
/ 19 ноября 2011

ага, разобрался!Кажется, цепочка из [OR] все испортила.Вот что работает:

Options +FollowSymlinks +Indexes
RewriteEngine on

RewriteCond %{HTTP_HOST} ^www\.yoshokatana\.com$ [NC,OR]
RewriteCond %{HTTP_HOST} ^yoshokatana\.com$ [NC]
RewriteRule ^(.*)$ http://yosho.me/$1 [R=301,L]

RewriteCond %{HTTP_HOST} ^www\.yosho\.me$ [NC]
RewriteRule ^(.*)$ http://yosho.me/$1 [R=301,L]

RewriteCond %{HTTP_HOST} ^dev\.yoshokatana\.com$ [NC]
RewriteRule ^(.*)$ http://dev.yosho.me/$1 [R,L]

RewriteRule ^([^\.]+)$ $1.html [NC,L]
RewriteCond %{THE_REQUEST} ^GET\ ([^\.]+)\.(html|htm) [NC]
RewriteRule ^([^\.]+)\.(html|htm)$ %1 [R=301,NC,L]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...