Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache 使用.htaccess通过index.php重新路由除特定请求集之外的所有请求_Apache_.htaccess_Mod Rewrite_Url Rewriting - Fatal编程技术网

Apache 使用.htaccess通过index.php重新路由除特定请求集之外的所有请求

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

所以我只是继承了一个网站。我想做的第一件事是构建一个标准的、简单易怒的CMS,它允许创建带有任何URL(例如:whatever.html)的页面

因此,如果用户点击example.com/whater.html,它应该获得whater.html的任何数据库信息并显示它。这是普通的东西

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

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

目前,我只有.htaccess显示一个自定义404页面,该页面依次检查数据库中的url并显示它是否存在。这是一个简单的解决方案,但我知道有些人有奇怪的浏览器工具栏(不管是否愚蠢,它们确实存在:)可以自动编辑404,我不想让我的用户因为不允许访问某些页面而烦恼这些工具栏


非常感谢你的帮助

促销的
重写规则应该仍然有效,因为它不是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.:)