2013-12-18 4 views
2

В моем php -проекте, у меня есть следующая структура папок.переписать условие не работает

/ [root] 
|-- ... [some other folders] 
|-- util/   // containing js,css files; should be accessible for anyone. 
|-- client/   
    |--data/   // contains files which can be uploaded by users 
     |-- private/ // should only be accessible for logged in users 
     |-- public/ // should be accessible for anyone. 
|-- ... [some other folders] 
|-- index.php 

я хочу достичь следующее поведение:

  1. Если кто-то прямой доступ к чему-либо в Util/он должен просто получить то, что он просил, если это не каталог.
  2. Если кто-то хочет получить доступ к любому файлу в пределах client/, он должен быть перенаправлен на index.php. Например, кто-то входит в URL-адрес www.test.com/client/data/private/test.jpg, сервер должен получить запрос index.php?request1=client/data/private/test.jpg.
  3. Все остальное должно быть переписано в index.php?request2=$1

Я не в состоянии получить функцию пункт 2 в соответствии с ожиданием.

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

RewriteEngine On 

# allow access to all files within util/ WORKS!! 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)(util)($|/) - [L] 

# here i have problems.. how can i achieve, that access to folder client/ is rewritten to index.php?request1=$1 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_URI} ^client 
RewriteRule ^(.*)$ index.php?request1=$1 [QSA,L] 

# rewriting everything else WORKS!! 
RewriteRule ^(.+)$ index.php?request2=$1 [QSA,L] 

Что я делаю неправильно здесь?

+0

Что должно произойти с '/ клиент/dir1/dir2', где конкретный _file_ был не запрошенной? Должно ли это быть переписано index.php, или если доступ к каталогу не изменен? –

+0

это должно либо быть захвачено RewriteRule 3, либо выбросить одну из этих ошибок http 401, 404. но я бы предпочел Правило 3 – emfi

+0

Ах, подождите минутку - 'REQUEST_URI', вероятно, должен иметь ведущий'/'при сопоставлении как' ^/клиент ", так как будет структурирован заголовок. Это в отличие от того, как «RewriteRule» ожидает соответствия в контексте каталога. Попробуйте, и это может быть все, что вам нужно. Все остальное выглядит справедливо для меня. –

ответ

1

Попробуйте этот код:

RewriteEngine On 

# allow access to all files within util/ WORKS!! 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^util($|/) - [L] 

# here i have problems.. how can i achieve, that access to folder client/ is rewritten to index.php?request1=$1 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^client(/.*|)$ index.php?request1=$1 [QSA,L] 

# rewriting everything else WORKS!! 
RewriteRule ^((?!index\.php).+)$ index.php?request2=$1 [QSA,L] 
+0

RewriteRule: не может скомпилировать регулярное выражение '^ ((! Index \\. Php. +) $' – emfi

+0

А у меня отсутствовал ')' попробовал отредактированный код сейчас. – anubhava

+0

безупречный! вы спасли мой день, спасибо. – emfi

Смежные вопросы