Мод Переписать Каталог Проверка - PullRequest
1 голос
/ 24 мая 2011

У меня есть ситуация, когда у меня есть несколько клиентов, каждый из которых хотел бы получить доступ к их сайту через mydomain.com/clientname. Чтобы все было организовано, я храню фактические файлы для клиентских сайтов в / client / clientname. Я могу достичь желаемого эффекта, поместив множество строк в мой .htaccess:

RewriteRule ^client1(.*)$ /client/client1$1 [L]
RewriteRule ^client2(.*)$ /client/client2$1 [L]

и т.д.

Я пытаюсь сделать это более чистым способом, проверяя, существует ли каталог клиента в / client или нет. (Если я определил, что это не допустимый файл или каталог) Но по какой-то причине это, похоже, не работает:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond /client/%{REQUEST_FILENAME} -d
RewriteRule ^(.*)$ /client/$1 [L,QSA]

Чего мне не хватает?

1 Ответ

3 голосов
/ 24 мая 2011

Из документов Apache mod_rewrite :

REQUEST_FILENAME

Полный локальный путь файловой системы к файлу или сценарию, соответствующему запросу , если он уже был определен сервером в момент обращения к REQUEST_FILENAME. В противном случае, например, при использовании в контексте виртуального хоста, то же значение, что и REQUEST_URI.

Ваша линия:

RewriteCond /client/%{REQUEST_FILENAME} -d

, кажется, вызывает проблему, потому что это заставляет Apache искать следующий путь к файлу:

/client/[the whole filesystem path of requested file]

что совершенно точно не то, что вы хотите.

Вы можете исправить это следующим образом:

RewriteCond %{DOCUMENT_ROOT}/client%{REQUEST_URI} -d
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...