Apache 使用.htaccess通过index.php重新路由除特定请求集之外的所有请求
所以我只是继承了一个网站。我想做的第一件事是构建一个标准的、简单易怒的CMS,它允许创建带有任何URL(例如:whatever.html)的页面 因此,如果用户点击example.com/whater.html,它应该获得whater.html的任何数据库信息并显示它。这是普通的东西 我的问题是,网站上有相当多的页面(都列在.htaccess中)需要继续访问。例如,/Promotions通过.htaccess链接到Promotions.php,我需要它保持这种状态 有人知道我如何构造.htaccess文件以允许特定的重写仍然有效,但通过index.php重新路由所有其他请求吗 目前,我只有.htaccess显示一个自定义404页面,该页面依次检查数据库中的url并显示它是否存在。这是一个简单的解决方案,但我知道有些人有奇怪的浏览器工具栏(不管是否愚蠢,它们确实存在:)可以自动编辑404,我不想让我的用户因为不允许访问某些页面而烦恼这些工具栏Apache 使用.htaccess通过index.php重新路由除特定请求集之外的所有请求,apache,.htaccess,mod-rewrite,url-rewriting,Apache,.htaccess,Mod Rewrite,Url Rewriting,所以我只是继承了一个网站。我想做的第一件事是构建一个标准的、简单易怒的CMS,它允许创建带有任何URL(例如:whatever.html)的页面 因此,如果用户点击example.com/whater.html,它应该获得whater.html的任何数据库信息并显示它。这是普通的东西 我的问题是,网站上有相当多的页面(都列在.htaccess中)需要继续访问。例如,/Promotions通过.htaccess链接到Promotions.php,我需要它保持这种状态 有人知道我如何构造.htacc
非常感谢你的帮助 促销的
重写规则应该仍然有效,因为它不是404
如果404处理程序显示页面是因为它存在于数据库中,那么它应该返回200ok
状态(覆盖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]
因此,从理论上讲,让404处理程序处理尚未重写规则的请求应该可行吗?再次感谢您的帮助。:)没错,使用404处理程序是一种“经典”的方式(在mod_rewrite和其他重写引擎广泛使用之前)。当页面实际存在时,请记住将状态重置为200 OK,否则您会发现页面开始从搜索引擎中消失(或者一开始就没有索引)。非常感谢您的帮助Ben.:)