mod_rewrite - перенаправление на несколько разных файлов PHP - PullRequest
1 голос
/ 19 октября 2010

Я хочу, чтобы любой запрос к / files / был перенаправлен на один скрипт php, а все остальные (не для определенных типов файлов) были направлены на другой.Что бы я ни пытался, я не могу заставить это работать.Это из моего файла конфигурации виртуального сервера apache2:

<Directory /var/www/test/public>

RewriteEngine On
RewriteBase /files
RewriteRule ~files/(.+) file-handler.php?id=$1 [L,QSA]
RewriteRule !\.(pdf|gif|jpg|png|css|swf|txt|php|ico|html|js|xml|flv)$ /index.php?page=%{REQUEST_URI}

</Directory>

Я также попробовал это:

<Directory /var/www/test/public>

RewriteEngine On
RewriteBase /
RewriteRule !\.(pdf|gif|jpg|png|css|swf|txt|php|ico|html|js|xml|flv)$ /index.php?page=%{REQUEST_URI}
RewriteBase /files
RewriteRule ~files/(.+) file-handler.php?id=$1 [L,QSA]

</Directory>

Ответы [ 5 ]

0 голосов
/ 19 октября 2010

Попробуйте эти правила:

RewriteRule ^files/(.+) file-handler.php?id=$1 [L,QSA]
RewriteCond %{REQUEST_URI} !\.(pdf|gif|jpg|png|css|swf|txt|php|ico|html|js|xml|flv)$
RewriteRule !^files/ /index.php?page=%{REQUEST_URI} [L]

Первое правило соответствует каждому запросу, который является путем URI (без префикса контекстного пути, см. Директиву RewriteBase ), начинающимся с files/.И второе правило соответствует каждому запросу, путь которого не начинается ни с files/, ни заканчивается одним из перечисленных расширений имени файла.

0 голосов
/ 19 октября 2010
RewriteCond ^files/(.*)\.(pdf|gif|jpg|png|css|swf|txt|php|ico|html|js|xml|flv)$
RewriteRule file-handler.php?id=$1 [L,QSA]
RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]

Не проверено, но, думаю, сработает.

Первая строка: сопоставьте любые запросы для типов файлов www.example.com/files/*.< в приведенном выше списке>

Вторая строка: перенаправление, соответствующее файлу-handler.php? Id = <совпадение сверху>

Третья строка: соответствовать всему остальному

0 голосов
/ 19 октября 2010

Ну, я не решил эту проблему, но нашел обходной путь - я просто перенаправляю на один файл PHP, а затем выполняю там логику.Не знаю, почему я не думал об этом раньше ...

0 голосов
/ 19 октября 2010

Я думаю, что ваша проблема связана с RewriteBase и / или совпадением ~ файла.Вы пытались использовать только одну базу и использовать ее для своих правил?Не совсем уверен, что вы пытаетесь с вашими правилами, но

RewriteEngine On<br> RewriteBase /<br> RewriteRule ^files/(.+) /file-handler.php?id=$1 [L,QSA]<br> RewriteRule !.(pdf|gif|jpg|png|css|swf|txt|php|ico|html|js|xml|flv)$ /index.php [L,QSA]

Вы можете просто использовать $_SERVER['REQUEST_URI'] в PHP напрямую.

Другой способ попробоватьнесколько <Directory> разделов (один для подкаталога и один для корня).

Но, как вы заметили, просто вставить в один файл PHP и перенаправить туда часто легче отладить.

0 голосов
/ 19 октября 2010

Вы использовали виртуальные хосты?Секция должна иметь "RewriteOptions Inherit"

...