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

时间:2010-12-09 01:43:03

标签: apache .htaccess mod-rewrite url-rewriting

所以我只是继承了一个网站。我想要做的第一件事就是构建一个漂亮的小标准,易于使用的CMS,它允许创建一个包含任何URL的页面(例如:whatever.html)。

因此,如果用户点击example.com/whatever.html,它应该获取whatever.html的任何数据库信息并显示它。这是磨坊的一部分。

我的问题是网站上有很多页面(都在.htaccess中列出)需要继续访问。例如,/ Promotions通过.htaccess链接到promotions.php,我需要它保持这种状态。

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

目前,我只有.htaccess显示一个自定义404页面,该页面依次检查数据库的数据库并显示它(如果存在)。这是一个简单的解决方案,但我知道有些人有奇怪的浏览器工具栏(愚蠢或不存在,它们存在:))autoredirect 404s,我讨厌通过不允许访问某些页面来惹恼我的用户这些工具栏。

非常感谢你的帮助!

2 个答案:

答案 0 :(得分:5)

促销的RewriteRule仍应有效,因为它不是404。

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

至于进行重新路由,你可以这样做:

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

答案 1 :(得分:3)

这是另一种变体:

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