Назад | Перейти на главную страницу

Устранение неполадок при перезаписи поддомена с подстановочными знаками .htaccess

Я работал над этой проблемой в течение трех дней и публиковал сообщения на нескольких форумах без каких-либо потенциальных клиентов.

Проблема:

Когда пользователь вводит SUBDOMAIN.domain.com, я хочу, чтобы он оставался таким же в окне URL.

Настоящее расположение этих файлов - domain.com/apps/SUBDOMAIN.

Я знаю, что это возможно с использованием записи DNS A .domain.com (что я сделал) и правила .htaccess.

Это мое правило .htaccess на данный момент

RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\.domain\.com$ [NC]
RewriteCond %{HTTP_HOST} ^(www\.)?([a-z0-9-]+)\.domain\.com$ [NC]
RewriteRule !^([a-z0-9-]+)($|/) /apps/%2%{REQUEST_URI} [PT,L]

Хорошо, это почти работает.

Ввод subdomain.domain.com читается из domain.com/apps/subdomain

НО что-то идет ужасно неправильно.

Посещение subdomain.domain.com/image.jpg (AKA domain.com/apps/subdomain) работает нормально

Посещение subdomain.domain.com/anyfolder/image.jpg (AKA domain.com/apps/subdomain) возвращает 404

Журнал ошибок Cpanel показывает следующее:

[Thu Nov 18 20:48:50 2010] [error] [client ***.**.***.***] File does not exist: /home/domain/public_html/images, referer: http://subdomain.domain.com/apps/subdomain/

Таким образом, кажется, что он правильно переписывает на основе первого каталога, но все, что ниже, отправляется обратно в корень public_html

Будем очень признательны за любую помощь и советы

Спасибо,

Тим

PS. Мне пришлось удалить правильное форматирование гиперссылок, поскольку я новый пользователь.

Поправьте меня, если я ошибаюсь, но правило перезаписи у вас есть:

RewriteRule !^([a-z0-9-]+)($|/) /apps/%2%{REQUEST_URI} [PT,L]

говорит: переписать, только если ^([a-z0-9-]+)($|/) делает не соответствие. Когда ваш URL-путь /anyfolder/image.jpg, указанное выше будет соответствовать (^anyfolder/), поэтому правило перезаписи будет не быть запущенным, так что вы в основном продолжите subdomain.domain.com/anyfolder/image.jpg.

Следующий вопрос SO имеет аналогичное требование:

В своем ответе главич дает ответ, который должен работать, также дает эту ссылку:

Попробуйте, все должно работать нормально.

Можете ли вы отредактировать httpd.conf? Намного проще использовать динамические виртуальные хосты. Проверять, выписываться http://httpd.apache.org/docs/2.2/vhosts/mass.html и http://httpd.apache.org/docs/2.2/mod/mod_vhost_alias.html