我需要设置一个 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]
这个还没有经过测试,但是你明白了。