Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/5.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
.htaccess htaccess-我可以将一个重写条件添加到另一个重写条件吗_.htaccess_Mod Rewrite - Fatal编程技术网

.htaccess htaccess-我可以将一个重写条件添加到另一个重写条件吗

.htaccess htaccess-我可以将一个重写条件添加到另一个重写条件吗,.htaccess,mod-rewrite,.htaccess,Mod Rewrite,好的,我会把它剥去,因为它要么简单要么不可能 URL=www.example.com/foldername/ 用户IP=203.0.113.111 服务器上的文件夹=/203011311 foldername/ .htaccess 这将保护文件夹查看,除非用户IP特定于请求的foldername,并且存在名为文件夹的IP-URI 需要专门使用HTACCESS的解决方案。您可以对一个重写规则使用多个RewriteConds。只需将RewriteConds写在彼此下面,例如 RewriteCon

好的,我会把它剥去,因为它要么简单要么不可能

  • URL=
    www.example.com/foldername/
  • 用户IP=
    203.0.113.111
  • 服务器上的文件夹=
    /203011311 foldername/
.htaccess 这将保护文件夹查看,除非用户IP特定于请求的foldername,并且存在名为文件夹的IP-URI


需要专门使用HTACCESS的解决方案。

您可以对一个
重写规则使用多个
RewriteCond
s。只需将
RewriteCond
s写在彼此下面,例如

RewriteCond foo bar
RewriteCond bar foo
RewriteRule .* example.org

重写规则仅在
foo==bar
bar==foo
为真(从不)时执行:)

是的,你可以做这样的事情,但不是以你现在的方式。您只需要使用正确的服务器变量

此指令的问题是
请求\u FILENAME
是一个绝对文件系统路径。因此,这将有效地检查
^2030113111-/home/user/public\u html/foldername
是否为有效目录,这将失败。
TestString
也是一个字符串,而不是正则表达式,因此
^
前缀也会破坏一些东西

相反,您可以执行以下操作:

RewriteCond %{REMOTE_ADDR} ^([^.]+)\.([^.]+)\.([^.]+)\.([^.]+)$
RewriteCond %{DOCUMENT_ROOT}/%1%2%3%4-$1 -d
RewriteRule (.+) - [L]
其中,
$1
是由
重写规则
模式匹配的URL路径。首先处理
RewriteRule
模式,然后再处理它前面的
RewriteCond
指令

为了测试我们正在检查的目录,您可以将其分配给环境变量,并在脚本中检查它。因此,对于测试:

RewriteCond %{REMOTE_ADDR} ^([^.]+)\.([^.]+)\.([^.]+)\.([^.]+)$
RewriteCond %{DOCUMENT_ROOT}/%1%2%3%4-$1 (.*)
RewriteRule (.+) - [E=DIRECTORY_CHECKING_FOR:%1,L]
检查脚本中的环境变量
DIRECTING\u CHECKING\u,根据您的文件系统结构,该变量应显示如下内容:
/home/user/public\u html/203011311 foldername


请注意,
%1
与前面CondPattern中最后一个匹配的组相匹配(如果没有匹配的组,则不一定是紧靠上面的组)。因此,
重写规则中的
%1
替换匹配
(.*)
(我们正在检查的整个“目录名”)。然而,
RewriteCond
TestString中的
%1
与IP地址的第一个八位字节匹配。

OK,不显示换行符,但。。。。。。不是我想要的。。。我知道你可以堆叠和传递捕获的组。我想知道第二个条件是否可行。。。RewriteCond^%1%2%3%4-%{REQUEST_FILENAME}-d实际上是RewriteCond^255255-%{REQUEST_FILENAME}-d,因此服务器上有一个名为255255 foldername的文件夹。
RewriteCond %{REMOTE_ADDR} ^([^.]+)\.([^.]+)\.([^.]+)\.([^.]+)$
RewriteCond %{DOCUMENT_ROOT}/%1%2%3%4-$1 -d
RewriteRule (.+) - [L]
RewriteCond %{REMOTE_ADDR} ^([^.]+)\.([^.]+)\.([^.]+)\.([^.]+)$
RewriteCond %{DOCUMENT_ROOT}/%1%2%3%4-$1 (.*)
RewriteRule (.+) - [E=DIRECTORY_CHECKING_FOR:%1,L]