.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基于此)将正斜杠字符更改为加密的字符索引映射中不存在的另一个字符。不过感谢您的回答:)我将其标记为已回答,因为理论上,这是正确的。