Вот ситуация: у меня есть несколько разных веб-проектов, работающих на одном общем хосте. Проект «А» доступ через поддомен (subA.mydomain.com) пока проект "Б" это главный mydomain.com
И A, и B являются символическими ссылками внутри папки public_html хоста:
ln -s /home/myhost/ProjectA ~/public_html/subA
ln -s /home/myhost/ProjectB ~/public_html/main
Поддомен (проект А) работает нормально и сайт работает на нем. Для 'B' который является основным доменом, я использовал .htaccess, чтобы указать основной домен на подпапку, как написано Вот. Сайт домена тоже работает нормально.
Проблема в том, когда я mydomain.com/subA, веб-сайт субдомена (проект А) открывается. Я попытался добавить правила перенаправления, чтобы указать mydomain.com/subA -> subA.mydomain.com вот так:
RewriteCond %{HTTP_HOST} ^mydomain.com$ [OR]
RewriteCond %{HTTP_HOST} ^www.mydomain.com$
RewriteRule ^subA\/?$ "http\:\/\/subA\.mydomain\.com\/" [R=301,L]
Но URL-адрес все еще читается mydomain.com/subA а показанный веб-сайт - это проект A (с отсутствующими изображениями и статическими файлами, очевидно, поскольку это другой веб-проект).
Почему не работает перенаправление?
Кажется, сработала следующая строка (и удалите более ранний код перенаправления с регулярными выражениями):
RedirectMatch 301 /subA/ http://subA.mydomain.com/
Спасибо всем!
Если у вас нет RewriteBase /
где-то, ^subA\/?$
ничего не будет соответствовать. Mod_rewrite просматривает весь URL-адрес, включая начальный /. Пытаться:
RewriteRule ^/subA/?$ http://subA.mydomain.com/ [R=301,L]
Также вы можете расслабиться на побеге. Это не больно, но и ничему не помогает, и читать труднее.
URI запроса для mydomain.com/subA - / subA (обратите внимание на отсутствие косой черты в конце), который не будет соответствовать
измените свое правило перезаписи на
RewriteRule ^ subA http://subA.mydomain.com/ [R = 301, L]