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 重写规则&;在URL中转义(编码)前斜杠_.htaccess_Mod Rewrite_Url Rewriting - Fatal编程技术网

.htaccess 重写规则&;在URL中转义(编码)前斜杠

.htaccess 重写规则&;在URL中转义(编码)前斜杠,.htaccess,mod-rewrite,url-rewriting,.htaccess,Mod Rewrite,Url Rewriting,我开发了这个重写规则,它一直很有效,直到我发现了一个问题 这是这里的规则: RewriteCond %{REQUEST_URI} ^/([^/]+)/([^/]+)/([^/]+)/(.*)$ RewriteCond %{DOCUMENT_ROOT}/%1/%2/%4.php -f RewriteRule ^ /%1/%2/%4.php?id=%3 [QSA,L] URL格式如下:/home/service/ID/scriptname 请注意,ID是动态的,当检查文件是否存在时,重写规则

我开发了这个重写规则,它一直很有效,直到我发现了一个问题

这是这里的规则:

 RewriteCond %{REQUEST_URI} ^/([^/]+)/([^/]+)/([^/]+)/(.*)$
 RewriteCond %{DOCUMENT_ROOT}/%1/%2/%4.php -f
 RewriteRule ^ /%1/%2/%4.php?id=%3 [QSA,L]
URL格式如下:/home/service/ID/scriptname 请注意,ID是动态的,当检查文件是否存在时,重写规则不考虑它

但在这个场景中,我发现,我正在使用的一个ID包含一个“%2F”-解码时会转换为正斜杠(/)-出于某种原因,重写规则会在中断时中断,因为它认为存在另一个目录


我的问题是,为什么要在重写规则中解码%2F,我如何设计解决方案最好不要快速破解或更改ID。

我认为您需要在重写规则中添加B标志,如下所示:

RewriteRule ^ /%1/%2/%4.php?id=%3 [QSA,L,B]

查看此项了解更多信息。

问题是,%4有时可能有子目录,可以是/scriptname,也可以是/scriptname/child/bacon:(这正是我所需要的,但只是以某种方式应用于一个变量。我想不出任何事情,因为标志应用于整个替换URL,但您是否尝试过,结果不符合预期?正确:(-我在mod_rewrite之外找到了我的修复,现在一切都好了。基本上修改了加密和解密。)(ID基于此)将正斜杠字符更改为加密的字符索引映射中不存在的另一个字符。不过感谢您的回答:)我将其标记为已回答,因为理论上,这是正确的。