仅当请求不以'/ THEMES /'开头时,Apache mod_rewrite

时间:2009-07-25 09:58:33

标签: regex apache mod-rewrite

我正在用PHP编写CMS,现在我正在使用主题功能。我有一个.htaccess文件:

RewriteEngine ON
RewriteRule ^([a-zA-Z][a-zA-Z0-9]*)$ index.php?m=$1
RewriteRule ^([a-zA-Z][a-zA-Z0-9]*)/(.+)$ index.php?m=$1&p=$2

如果我有要求:

/page

它必须加载名为page的类的视图函数。

如果我有要求:

/page/test

它必须使用参数'test'加载名为page的类的视图函数。 这一切都有效,

但是如果请求 NOT 以:

开头,我希望它只应用RewriteRules
/THEMES/

所以我可以应用CSS样式等......

任何人都可以帮助我吗?感谢。

4 个答案:

答案 0 :(得分:27)

在重写规则之前添加:

RewriteCond %{REQUEST_URI} !^/THEMES/

答案 1 :(得分:12)

您可以使用其他规则来停止重写过程:

RewriteRule ^THEMES/ - [L]
RewriteRule ^([a-zA-Z][a-zA-Z0-9]*)$ index.php?m=$1
RewriteRule ^([a-zA-Z][a-zA-Z0-9]*)/(.+)$ index.php?m=$1&p=$2

答案 2 :(得分:1)

做类似的事情:

RewriteRule ^THEMES - [L]

这意味着:如果请求以THEMES开头,则只需提供服务。

另一种可能的解决方案是:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d 

这意味着:如果请求解析为现有文件(第一行)或目录(第二行),请不要重写。

也许你应该阅读文件,写得非常好。

答案 3 :(得分:0)

如果要在使用url-rewriting时包含css / js文件,请使用该标记指定主URL。

< base href="http://www.your-web-site-adress.com" >

然后你可以轻松地包含你的css / js文件:

< script src="/blabla.js" >

它会将基础href添加为前缀。