Субдомен переадресовывать на URL используя Mod_Rewrite? - PullRequest
2 голосов
/ 07 января 2012

В настоящее время я использую mod_rewrite, но хотел бы, чтобы в указанном URL-пути использовалось имя субдомена. Возможно ли это с mod_rewrite?

В настоящее время URL выглядит так:

http://domain.com/index.php?wiki/index/ -> http://domain.com/forum/wiki

Как я могу получить URL-адрес

http://wiki.domain.com/forum/ 

когда каталог вики не существует? Я продолжаю получать 403, поскольку каталог не существует, и поэтому он запрещен. У меня сейчас есть:

RewriteEngine on
RewriteCond %{HTTP_HOST} ^wiki.domain.com$ [OR]
RewriteCond %{HTTP_HOST} ^wiki.domain.com$
RewriteRule ^(.*)$ http://domain.com/wiki/index[R=301,L]

Ответы [ 2 ]

1 голос
/ 07 января 2012

Вот решение, основанное на mod_rewrite, просто поместите эти строки в ваш файл .htaccess:

Options +FollowSymLinks -MultiViews
RewriteEngine on

RewriteCond %{HTTP_HOST} ^domain\.com$ [NC]
RewriteRule ^forum/wiki/?$ http://wiki.domain.com/forum/ [R=301,L,NC]

Это перенаправит http://domain.com/forum/wiki на http://wiki.domain.com/forum/

0 голосов
/ 07 января 2012

Вот совет: вам не нужно делать перенаправление на самом деле .

Просто имейте один vhost, который обрабатывает оба домена.

Просто выполните внутреннюю перезапись, и она будет работать.

Вот микс моего собственного виртуального хоста (, который обрабатывает domain.com и все *.domain.com) и того, что вы хотите (это может не сработать на 100%, но эй, я дам вам два совета после ):

<VirtualHost *>

    ServerAdmin webmaster@domain.fr
    DocumentRoot "/web/htdocs/domain/prod/website"

    ServerName domain.com
    ServerAlias *.domain.com
    ErrorLog "/web/logs/domain.error.log"
    CustomLog "|/opt/httpd/bin/rotatelogs /web/logs/domain/access_log.%Y-%m-%d-%H_%M_%S.log 5M" combined

    # your RewriteRules ()
    RewriteEngine On

    # Trace:
    # (!) file gets big quickly, remove in prod environments:
    RewriteLog "/web/logs/domain.rewrite.log"
    RewriteLogLevel 9

    # Your RewriteRules ()
    RewriteCond %{HTTP_HOST} ^wiki.domain.com$
    RewriteRule ^/forum/(.*) /wiki/index.php?wiki/index$1 [QSA,L]

</VirtualHost>

Два совета:

Если вы находитесь не в размещенной среде (= если это ваш собственный сервер и вы можете изменять виртуальные хосты, а не только файлы .htaccess), попробуйте использовать директиву RewriteLog: она помогает вам отслеживать по таким проблемам:

# Trace:
# (!) file gets big quickly, remove in prod environments:
RewriteLog "/web/logs/mywebsite.rewrite.log"
RewriteLogLevel 9
RewriteEngine On

Мой любимый инструмент для проверки регулярных выражений:

http://www.quanetic.com/Regex (не забудьте выбрать ereg (POSIX) вместо preg (PCRE)!)

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