Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/277.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 仅当目录或文件不存在时重写规则_Php_.htaccess_Redirect - Fatal编程技术网

Php 仅当目录或文件不存在时重写规则

Php 仅当目录或文件不存在时重写规则,php,.htaccess,redirect,Php,.htaccess,Redirect,我正在尝试使用php和.htaccess创建url处理程序,我的问题是,只有在url中输入的文件\目录不存在时,我才知道如何使用重写条件。这与shell脚本-d和-f函数非常类似 试试这样: RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule XXX 请查看此资源 RewriteCond %{REQUEST_FILENAME} !-f //

我正在尝试使用php和.htaccess创建url处理程序,我的问题是,只有在url中输入的文件\目录不存在时,我才知道如何使用重写条件。

这与shell脚本-d和-f函数非常类似

试试这样:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule XXX

请查看此资源

RewriteCond %{REQUEST_FILENAME} !-f
//                                ^ this means file.
RewriteCond %{REQUEST_FILENAME} !-d
//                              ^ this means NOT, "d" means directory.
// Your rewrite rule here.
“-d”(is directory)将TestString视为路径名并进行测试 它是否存在,并且是一个目录

“-f”(是常规文件)将TestString视为路径名并进行测试 是否存在,并且是否为常规文件

以感叹号(“!”)作为前缀以否定其含义

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
这应该可以做到(替换
):

重新编写引擎打开
重写cond%{REQUEST_FILENAME}-F
重写cond%{REQUEST_FILENAME}-D
重写cond%{REQUEST_FILENAME}-L
重写规则。*[L]

如果文件、目录或链接不存在,它会进行重定向。

也就是说:如果请求的文件名是一个存在的文件,并且是一个存在的目录,您甚至可以尝试搜索吗?嗯,我确实搜索过它。请注意,这只适用于
块或
.htaccess
文件,而不是在
或根配置上下文中,其中请求\u文件名尚未使用完整路径完成(因为它未知)。在这些上下文中,路径的一部分必须手动添加到测试中,因为REQUEST_FILENAME将与REQUEST_URI相同。
RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l

RewriteRule .* <filename> [L]