mod_rewrite добавление имени субдомена к строке запроса - PullRequest
0 голосов
/ 07 июля 2011

Я пытаюсь принудительно перенаправить с субдомена www веб-сайта на субдомен forum, сохраняя при этом строку запроса. Другими словами, я ожидаю этого:

http://www.website.com/index.php?key=value

Превратить в:

http://forum.website.com/index.php?key=value

Итак, я написал это предположительно простое правило:

RewriteCond %{HTTP_HOST} ^www\.website\.com$
RewriteRule (.*) http://forum.website.com/$1 [L,QSA,R=301]

Это правило перезаписи only , которое есть в моем .htaccess.

Приведенный выше пример URL переписывается в:

http://forum.website.com/forum/index.php?key=value

Что это за странное (и для меня неожиданное) поведение? Что я делаю неправильно / отсутствует?


РЕДАКТИРОВАТЬ 1: Добавлено переписать журналы (обрезанные бесполезные данные даты)

[www.website.com/sid#7f3580c0a4d8][rid#7f3580d935a0/initial] (3) [perdir /var/www/website/] strip per-dir prefix: /var/www/website/forum/test -> forum/test
[www.website.com/sid#7f3580c0a4d8][rid#7f3580d935a0/initial] (3) [perdir /var/www/website/] applying pattern '(.*)' to uri 'forum/test'
[www.website.com/sid#7f3580c0a4d8][rid#7f3580d935a0/initial] (4) [perdir /var/www/website/] RewriteCond: input='www.website.com' pattern='^www\.website\.com$' => matched
[www.website.com/sid#7f3580c0a4d8][rid#7f3580d935a0/initial] (2) [perdir /var/www/website/] rewrite 'forum/test' -> 'http://forum.website.com/forum/test'
[www.website.com/sid#7f3580c0a4d8][rid#7f3580d935a0/initial] (2) [perdir /var/www/website/] explicitly forcing redirect with http://forum.website.com/forum/test
[www.website.com/sid#7f3580c0a4d8][rid#7f3580d935a0/initial] (1) [perdir /var/www/website/] escaping http://forum.website.com/forum/test for redirect
[www.website.com/sid#7f3580c0a4d8][rid#7f3580d935a0/initial] (1) [perdir /var/www/website/] redirect to http://forum.website.com/forum/test [REDIRECT/301]
[forum.website.com/sid#7f3580c54d70][rid#7f3580d935a0/initial] (3) [perdir /var/www/website/] add path info postfix: /var/www/website/forum/forum -> /var/www/website/forum/forum/test
[forum.website.com/sid#7f3580c54d70][rid#7f3580d935a0/initial] (3) [perdir /var/www/website/] strip per-dir prefix: /var/www/website/forum/forum/test -> forum/forum/test
[forum.website.com/sid#7f3580c54d70][rid#7f3580d935a0/initial] (3) [perdir /var/www/website/] applying pattern '(.*)' to uri 'forum/forum/test'
[forum.website.com/sid#7f3580c54d70][rid#7f3580d935a0/initial] (4) [perdir /var/www/website/] RewriteCond: input='forum.website.com' pattern='^www\.website\.com$' => not-matched
[forum.website.com/sid#7f3580c54d70][rid#7f3580d935a0/initial] (1) [perdir /var/www/website/] pass through /var/www/website/forum/forum

РЕДАКТИРОВАТЬ 2: Это мой веб-сайт.conf:

<VirtualHost *:80>
    ServerName website.com

    DocumentRoot /var/www/website/forum/
</VirtualHost>

<VirtualHost *:80>
    ServerName www.website.com

    DocumentRoot /var/www/website/forum
</VirtualHost>

<VirtualHost *:80>
    ServerName forum.website.com

    DocumentRoot /var/www/website/forum
    <Directory />
         AddHandler fcgid-script .php
         FCGIWrapper /usr/lib/cgi-bin/php5 .php
         Options ExecCGI Indexes FollowSymLinks MultiViews
         AllowOverride All
         Order allow,deny
         allow from all
        </Directory>
</VirtualHost>

1 Ответ

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

Проверка ваших журналов перезаписи Я вижу, что forum/ уже является частью URL.Попробуйте вместо этого:

RewriteCond %{HTTP_HOST} ^www\.website\.com$
RewriteRule ^forum/(.*) http://forum.website.com/$1 [L,QSA,R=301]
...