使用.htaccess通过index.php重新路由所有的请求,除了一些特定的请求

所以我只是inheritance了一个网站。 我想要做的第一件事是build立一个很好的小标准,简单易用的CMS,它允许用任何URL创build一个页面(例如:whatever.html)。

因此,如果用户点击example.com/whatever.html,它应该得到任何数据库信息whatever.html并显示它。 这是工厂的东西的运行。

我的问题是,网站上有不less页面(都在.htaccess中列出)需要继续访问。 例如,/促销通过.htaccess链接到promotions.php,我需要它保持这种方式。

任何人都知道如何构build.htaccess文件,以允许特定的重写仍然工作,但通过index.php重新路由所有其他请求?

目前,我只是.htaccess显示一个自定义的404页面,然后检查数据库的url,并显示它,如果存在。 这是一个简单的解决scheme,但我知道有些人有奇怪的浏览器工具栏(愚蠢与否,他们存在:))autoredirect 404s,我不想用这些工具栏惹恼我的用户不允许访问某些网页。

非常感谢你的帮助!

促销的RewriteRule应该仍然工作,因为它不是404。

如果404处理程序正在显示页面,因为它存在于数据库中,那么它应该真的返回200 OK状态(覆盖404页面),所以您不应该在浏览器工具栏中遇到任何问题。

至于重新路由,你可以做这样的事情:

 RewriteEngine On RewriteCond %{REQUEST_URI} !^.*/(promotions|anotherone|somethingelse)($|/.*$) [NC] RewriteRule ^(.*)$ /index.php?p=$1 

这是另一个变种:

 RewriteEngine on RewriteRule ^/i/(.*)$ - [L] RewriteRule ^/css/(.*)$ - [L] RewriteRule ^index.php$ - [L] RewriteRule ^(.*)$ index.php?p=$1 [L,QSA]