Apache mod_rewrite only if request does not start with '/THEMES/'

我与影子孤独终老i 提交于 2020-08-19 05:57:39

问题


I'm writing a CMS in PHP, and now I'm working at the themes feature. I have a .htaccess file:

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

If I have a request to:

/page

it must load the view function of the class called page.

If I have a request to:

/page/test

it must load the view function of the class called page, with the parameter 'test'. This all works,

But I want it to apply the RewriteRules ONLY if the request does NOT start with:

/THEMES/

So I can apply CSS styles etc...

Can anyone help me? Thanks.


回答1:


You could use an additional rule to stop the rewriting process:

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:


Add this before your rewrite rules:

RewriteCond %{REQUEST_URI} !^/THEMES/



回答3:


Do something like:

RewriteRule ^THEMES - [L]

That means: if the request starts with THEMES, just serve it.

Another possible solution is:

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

That means: do not rewrite if the request resolves to an existing file (first line) or directory (second line).

Maybe you should read the documentations, is really well written.




回答4:


If you want to include css/js files while using url-rewriting use that tag to specify the main url.

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

Then you may easily include your css/js files like that:

< script src="/blabla.js" >

it'll add base href as prefix.



来源:https://stackoverflow.com/questions/1181781/apache-mod-rewrite-only-if-request-does-not-start-with-themes

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!