Apache RewriteRule 将图像、css 和 js 文件视为正常文件

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 文件(如果它存在)。

任何想法?

答案1

解决这个问题的一个简单方法是

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

这告诉 apache,如果该文件是系统上可以提供的真实文件,则不要运行规则。现在,如果您只想对 image/css/js 文件执行此操作,您可以这样做

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

这个还没有经过测试,但是你明白了。

相关内容