Apache mod_rewrite - пересылать корень домена в подкаталог - PullRequest
0 голосов
/ 13 июня 2010

У меня есть то, что я изначально считал простой проблемой. Я использую общий хостинг для своего веб-сайта (поэтому у меня нет доступа к конфигурации Apache), и мне была предоставлена ​​только одна папка для хранения всего моего содержимого. Это все хорошо, но это означает, что все мои поддомены должны у них есть виртуальный корень документа внутри public_html, что означает, что они фактически становятся папкой на моем основном домене.

Я бы хотел организовать public_html примерно так:

public_html/
    www/
        index.php
        ...
    sub1/
        index.php
        ...
    some_library/
        ...

Таким образом, весь мой веб-контент все еще находится в public_html, но только небольшая его часть будет предоставлена ​​клиенту. Я могу легко добиться этого для всех поддоменов, но это основной домен, с которым у меня возникают проблемы.

Я создал .htaccess файл в public_html со следующим:

Options +SymLinksIfOwnerMatch # I'm not allowed to use FollowSymLinks
RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_URI} !^/www [NC]
RewriteRule ^(.*)$ /www/$1 [L]

Это работает довольно хорошо, но по какой-то странной причине www.example.com/stuff переводится в запрос для www.example.com/www/stuff и, следовательно, выдается ошибка 404. Насколько я понимаю, если не был указан флаг 'R', mod_rewrite был чисто внутренним, поэтому я не могу понять, почему запрос генерируется, поскольку это подразумевает (по крайней мере для меня) перенаправление.

Я предполагал, что это будет тривиальная проблема, которую нужно решить, так как все, что я на самом деле хочу сделать, - это пересылать все запросы на получение корня www.example.com в подкаталог, но я потратил часы на поиск ответов, и ни один из них не совсем корректен. Мне трудно поверить, что я единственный, у кого есть эта проблема.

Я прошу прощения, если здесь уже был дан ответ на этот вопрос, я занимался поиском и тралом, но не смог найти подходящий ответ. Пожалуйста, кто-нибудь может пролить свет на это?

1 Ответ

0 голосов
/ 13 июня 2010

Наконец-то удалось это исправить самому.Оказывается, что Apache запоминает настройки папки даже после удаления файла .htaccess.Так как я играл с этим так долго, некоторые из моих предыдущих попыток полностью загрязнили конфигурацию.

Я решил это, сначала закомментировав весь файл .htaccess, кроме RewriteEngine off, которыйвернуть все (почти) в нормальное состояние.Затем мне удалось получить желаемый эффект, написав следующую конфигурацию:

<IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteRule ^$   www/   [L]
    RewriteRule (.*) www/$1 [L]
</IfModule>

Наконец, я создал еще один файл .htaccess в каталоге www, содержащий:

<IfModule mod_rewrite.c>
    RewriteEngine off
</IfModule>

СейчасКажется, все работает так, как я хотел.Жаль, что все это заняло так много времени!

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