Php 如果.htaccess中没有模式匹配,如何重定向到主页
朋友们,我是新手。htaccess和重写规则,对这些规则非常困惑。我正在尝试为index.php页面执行以下几行。 当我在url中写入一个或两个或三个或四个查询参数时,它就正常了。我收集这些模式匹配中的任何一个,并在php中进一步进行查询。但当查询参数超过四个参数时(比如有人故意给出错误的URL),我想将页面重定向到主页。我在互联网上找不到任何解决方案。谁能帮我,怎么做我迫切需要一个解决方案来完成这个项目。我读了很多文章,但不知道如何处理这个问题。我在Win7上用XAMPP执行这些任务。我使用的模式是 重写规则^([a-zA-Z0-9\]+)/?$index.php?levelone=$1[NC] 重写规则^([a-zA-Z0-9\]+)/([a-zA-Z0-9\]+)/?$index.php?一级=1级,二级=2级[NC] 重写规则^([a-zA-Z0-9\]+)/([a-zA-Z0-9\]+)/([a-zA-Z0-9\]+)/?$index.php?一级=$1,二级=$2,三级=$3[NC] 重写规则^([a-zA-Z0-9\]+)/([a-zA-Z0-9\]+)/([a-zA-Z0-9\]+)/([a-zA-Z0-9\]+)/?$index.php?llevelone=$1和leveltwo=$2和leveltwo=$3和leveltwo=$4[NC]Php 如果.htaccess中没有模式匹配,如何重定向到主页,php,apache,.htaccess,mod-rewrite,redirect,Php,Apache,.htaccess,Mod Rewrite,Redirect,朋友们,我是新手。htaccess和重写规则,对这些规则非常困惑。我正在尝试为index.php页面执行以下几行。 当我在url中写入一个或两个或三个或四个查询参数时,它就正常了。我收集这些模式匹配中的任何一个,并在php中进一步进行查询。但当查询参数超过四个参数时(比如有人故意给出错误的URL),我想将页面重定向到主页。我在互联网上找不到任何解决方案。谁能帮我,怎么做我迫切需要一个解决方案来完成这个项目。我读了很多文章,但不知道如何处理这个问题。我在Win7上用XAMPP执行这些任务。我使用的
URL示例: (假设localhost/myproject/index.php是我的主页) localhost/myproject/levelone/ localhost/myproject/levelone/leveltwo/ localhost/myproject/levelone/leveltwo/levelthree/ localhost/myproject/levelone/leveltwo/leveltwork/leveltwork/levelfour 当我使用这四个URL时就可以了,但是如果我使用 localhost/myproject/index.php/levelone/leveltwo/levelthree/levelfour/levelfive/levelsix/ 然后我的index.php页面返回一些没有样式和布局的html,我在.htaccess中尝试了许多类型的RewriteCond和命令,但都没有成功 我希望查询字符串参数必须在1到4的范围内,如果超过了范围(比如说五个参数),则页面必须再次重定向到主页(/index.php),否则与模式匹配。
如果有人知道是否有办法将这四种长模式组合成一行,以匹配四种模式中的任何一种,这将对我有所帮助。我建议避免重定向到主页。 在index.php中,如果未设置任何级别变量,则默认情况下显示主页内容 这里有一条单行规则(也许可以进一步简化): 而PHP:
$levels=array();
foreach (range(1,4) as $i) {
if (isset($_GET['level'.$i])) {$levels[$i]=$_GET['level'.$i];}
}
if (!empty($levels)) {
// show level content
} else {
// show home page
}
只有当文件或目录不存在时,此重写规则才会生效
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule . /path/to/index.php [L,QSA]
-f标志将使重写仅在文件不存在时生效,而-d标志将确保重写不会在目录存在时生效。谢谢回复我的朋友,但您的重写无法正常工作。正如您在php中所显示的,我已经这样做了,但是地址栏中的URL仍然是长格式的,就好像一个人输入了七个级别,即使它显示了主页(我不知道为什么会有一点奇怪的布局?)。如果我应用重写规则,而不是在执行它们之后,如果在else部分显示主页(如在php中),则显示主页时不包括css,并且URL保持长且不正确的形式。我不希望它用于SEO目的。**我想知道如果四种模式中的任何一种不匹配,如何重定向到主页。**重写规则有什么不起作用。您可以看到,最多可以接受四个变量。五个或五个以上的文件夹与该模式不匹配。使用嵌套文件夹时,页面看起来很奇怪的原因是它正在请求当前目录中的资源(如“style.css”),而为了正确显示,需要使用绝对路径(如“/style.css”或“/css/style.css”)
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule . /path/to/index.php [L,QSA]