.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的解决方案。您可以对一个
重写规则使用多个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]