Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/234.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/6/apache/8.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
Php 如果.htaccess中没有模式匹配,如何重定向到主页_Php_Apache_.htaccess_Mod Rewrite_Redirect - Fatal编程技术网

Php 如果.htaccess中没有模式匹配,如何重定向到主页

Php 如果.htaccess中没有模式匹配,如何重定向到主页,php,apache,.htaccess,mod-rewrite,redirect,Php,Apache,.htaccess,Mod Rewrite,Redirect,朋友们,我是新手。htaccess和重写规则,对这些规则非常困惑。我正在尝试为index.php页面执行以下几行。 当我在url中写入一个或两个或三个或四个查询参数时,它就正常了。我收集这些模式匹配中的任何一个,并在php中进一步进行查询。但当查询参数超过四个参数时(比如有人故意给出错误的URL),我想将页面重定向到主页。我在互联网上找不到任何解决方案。谁能帮我,怎么做我迫切需要一个解决方案来完成这个项目。我读了很多文章,但不知道如何处理这个问题。我在Win7上用XAMPP执行这些任务。我使用的

朋友们,我是新手。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]


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]