Перепишите путаницу - PullRequest
       12

Перепишите путаницу

0 голосов
/ 02 мая 2011

У меня есть следующие настройки перезаписи:

RewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_URI} !-f
RewriteCond %{REQUEST_URI} !-d
RewriteRule ^api/?.*$ api.php [NC,L]

RewriteCond %{REQUEST_URI} !-f
RewriteCond %{REQUEST_URI} !-d
RewriteRule ^.*$ web.php [L]

Я хочу, чтобы не-файлы и каталоги перехватывались api.php или web.php (которые выполняют свою собственную маршрутизацию), иОстальное вернуть файл или каталог.Тем не менее, основной маршрут '/', видимый mod_rewrite как '', не попадает - я думаю, это потому, что / является каталогом - корнем.

Как я могу это исправить, чтобы он шелчерез web.php, оставляя каталоги доступными?

Ответы [ 2 ]

1 голос
/ 03 мая 2011

Во-первых, вы должны изменить REQUEST_URI в своих правилах на REQUEST_FILENAME.См. http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html#rewritecond

REQUEST_URI: ресурс, запрошенный в строке запроса HTTP.

REQUEST_FILENAME: полный путь локальной файловой системы к файлу или сценарию, соответствующему запросу.1008 *

Затем добавьте еще одно правило:

RewriteCond %{REQUEST_URI} /
RewriteRule .* web.php [L]

Таким образом, конечный результат будет:

RewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^api/?.*$ api.php [NC,L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (.*)? web.php [NC,L]

RewriteCond %{REQUEST_URI} /
RewriteRule .* web.php [L]
0 голосов
/ 02 мая 2011

Синтаксис: RewriteBase URL-путь

URL-путь может быть корневым относительным путем или пустым. Пустое значение URL-пути означает, что база правил будет равна корню веб-сайта.

...