регулярное выражение htaccess - не следовать шаблону - PullRequest
0 голосов
/ 11 сентября 2009

У меня проблема с регулярным выражением внизу. Я пытаюсь передать все шаблоны , за исключением index.php, robots.txt и любого файла CSS и JS через индексный файл, однако у меня есть один конкретный путь, где мне нужно обрабатывать файлы JS и CSS с помощью PHP , Обычно моя структура URL выглядит следующим образом:

example.com / класс / функция

Допустим, я хочу обработать файлы CSS и JS из шаблона ниже:

example.com / просмотр / файл / xxxxx.js / KSS

обычно я думал бы, что этот код будет работать, но это не так:

(.*)(?!view\/file)(.*)\.(js|css)

по некоторым странным причинам этот код работает (убрал 'view' и добавил / перед (. *)):

(\w*)(?!\/file\/)\/(.*)\.(js|css)

но тогда я не смогу загружать файлы из основного каталога:

example.com / file.js

И когда я изменяю файл следующим образом, он снова не работает ... (все, что я сделал, это сделал / опционально):

(\w*)(?!\/file\/)(\/?)(.*)\.(js|css)

Вот оригинальный файл htaccess:

RewriteCond $1 !^(index\.php|robots\.txt|(.*)\.(js|css)) 
RewriteRule ^(.*)$ /index.php/$1 [L]

Ответы [ 2 ]

1 голос
/ 11 сентября 2009

Для удобства чтения и отладки я рекомендую вам выделить некоторые из ваших правил.

# Rewrite the special case
RewriteRule ^view/file/(rest of rule)

# Skip these
RewriteRule ^index\.php$ - [L]
RewriteRule ^robots\.txt$ - [L]
RewriteRule ^(.*)\.(js|css)$ - [L]

# Main rule
RewriteRule ^(.*)$ /index.php/$1 [L]
1 голос
/ 11 сентября 2009

Если я правильно понял, что-то вроде этого должно работать:

#rewrite specific css/js
RewriteRule ^view/file/(.*)\.(css|js)$ file.php?file=$1.$2 [L]

#only rewrite anything else if the path is not an existing file or directory
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

#rewrite to main handler
RewriteRule ^(.*)$ index.php/$1 [L]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...