Php .htaccess重定向如果文件存在,则重定向回

Php .htaccess重定向如果文件存在,则重定向回,php,.htaccess,mod-rewrite,Php,.htaccess,Mod Rewrite,如果用户导航到url/dir/test.ext(每次),我将尝试做什么 检查/dir/test.ext是否存在 如果存在,将其重定向到url/index.php 然后从index.php将其重定向回/var/test.ext 到目前为止,我所尝试的: .hAccess: 重新编写引擎打开 重写cond%{REQUEST_FILENAME}-D 重写cond%{REQUEST_FILENAME}-F 重写规则^([^?]*)$/index.php?路径=$1[NC,L,QSA] php:捕获重

如果用户导航到url/dir/test.ext(每次),我将尝试做什么

  • 检查/dir/test.ext是否存在
  • 如果存在,将其重定向到url/index.php
  • 然后从index.php将其重定向回/var/test.ext
到目前为止,我所尝试的:

.hAccess:
重新编写引擎打开
重写cond%{REQUEST_FILENAME}-D
重写cond%{REQUEST_FILENAME}-F
重写规则^([^?]*)$/index.php?路径=$1[NC,L,QSA]

php:捕获重定向到url,检查之前是否未访问,设置用户从$1页面返回1s后过期的cookie,重定向回-我确信此机制存在错误-

htaccess的问题是,只有当文件不存在时,.htaccess才会工作(!-f规则),如果我将其更改为(-f),则会出现
内部服务器错误,因为它将进入无限重定向循环。

404页面代码:

<?php $_SESSION['notallowed'] = 'notallowed';
header("location:http://dir/index.php");
?>

当用户点击一个不存在的目录或文件,设置一个会话并将它们重定向到索引时,此代码就会运行

index.php代码

<?php if ($_SESSION['notallowed']){ header("location:http://dir/var/test.ext");?>

此代码检查会话,如果找到,则重定向到/var/test.ext

404页面代码:

<?php $_SESSION['notallowed'] = 'notallowed';
header("location:http://dir/index.php");
?>

当用户点击一个不存在的目录或文件,设置一个会话并将它们重定向到索引时,此代码就会运行

index.php代码

<?php if ($_SESSION['notallowed']){ header("location:http://dir/var/test.ext");?>


此代码检查会话,如果找到,则重定向到/var/test.ext

此操作的全部目标是什么?我认为您正在尝试将用户从一个不存在的位置(如/dir/doesnotexist.ext)重定向到您的索引,但是第二个重定向没有意义。当它们到达index.php时,为什么要再次重定向它们?我会用404页来做这个。您可以设置一个带有重定向的特殊404错误页面。您还可以设置一个会话变量,索引将检查该变量,如果找到该变量,则转发该变量,但在该会话再次销毁之前,它们将无法访问您的索引。你能提供更多信息吗?@TylerRadlick如果文件不存在,我不会尝试重定向。只有当文件存在时,我才尝试重定向到index.php。用户访问url/a.php?b=c->检查a.php是否存在->重定向到index.php->重定向回a.php?b=c。谢谢,这件事的全部目标是什么?我认为您正在尝试将用户从一个不存在的位置(如/dir/doesnotexist.ext)重定向到您的索引,但是第二个重定向没有意义。当它们到达index.php时,为什么要再次重定向它们?我会用404页来做这个。您可以设置一个带有重定向的特殊404错误页面。您还可以设置一个会话变量,索引将检查该变量,如果找到该变量,则转发该变量,但在该会话再次销毁之前,它们将无法访问您的索引。你能提供更多信息吗?@TylerRadlick如果文件不存在,我不会尝试重定向。只有当文件存在时,我才尝试重定向到index.php。用户访问url/a.php?b=c->检查a.php是否存在->重定向到index.php->重定向回a.php?b=c。谢谢