Назад | Перейти на главную страницу

Apache RewriteRule для обработки изображений, файлов css и js как обычно

мне нужно настроить apache RewriteRule, чтобы иметь такое поведение:

example.com/foo => index.php?module=foo&action=&args=
example.com/foo/bar => index.php?module=foo&action=bar&args=
example.com/foo/bar/baz => index.php?module=foo&action=bar&args=baz
example.com/foo/bar/baz/foobaz => index.php?module=foo&action=bar&args=baz/foobaz

Я написал это регулярное выражение:

RewriteRule ^(.[^/]*)(\/)?(.[^/]+)?(\/)?(.+)?$ index.php?module=$1&action=$3&args=$5 [L,QSA]

Он работает хорошо, мне нужно только указать apache, чтобы он игнорировал все URL-адреса, заканчивающиеся определенным расширением (например, .jpg, .png, .css, .js, .gif и т. Д.); К ним следует относиться как обычно, например example.com/css/style.css должен показать файл CSS (если он существует).

Любая идея?

Самый простой способ обойти это

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.[^/]*)(\/)?(.[^/]+)?(\/)?(.+)?$ index.php?module=$1&action=$3&args=$5 [L,QSA]

Это говорит apache не запускать правило, если файл является реальным файлом в системе, который можно обслуживать. Теперь, если вы хотите сделать это только для файлов изображений / css / js, вы, вероятно, могли бы сделать

RewriteCond %{REQUEST_FILENAME} !^(.*).(js|jpg|css|gif)$
RewriteRule ^(.[^/]*)(\/)?(.[^/]+)?(\/)?(.+)?$ index.php?module=$1&action=$3&args=$5 [L,QSA]

Это не проверено, но идею вы поняли.