我需要build立一个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
我写了这个正则expression式:
RewriteRule ^(.[^/]*)(\/)?(.[^/]+)?(\/)?(.+)?$ index.php?module=$1&action=$3&args=$5 [L,QSA]
它工作的很好,我只需要告诉Apache忽略所有以特定扩展名(例如.jpg,.png,.css,.js,.gif等)结尾的url。 这些应该被视为正常,例如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]
那个没有经过testing,但是你明白了。