мне нужно настроить 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]
Это не проверено, но идею вы поняли.