htaccess正则表达式不接受某些特殊字符

I have a PHP script located at http://localhost/dir1/dir2/shift.php that I am passing urls as parameters to like so: http://localhost/dir1/dir2/https://google.com but I am getting a Forbidden you don't have access error. When I remove the : it works fine though. I have checked my regex with some online regex validation tools and it says that it should be working but it doesn't

RewriteEngine on
RewriteRule ^dir1\/dir2\/([A-Za-z0-9\!\@\#\$\%\^\&\*\(\)\_\-\+\=\{\}\[\]\;\:\'\"\<\,\>\.\?\|\~\`\s\/\\]+)\/?  dir1\/dir2\/shift.php?url=$1 [L]

Any help would be great. Thanks!

doude5860
doude5860 :可能导致url2filesystem映射中的错误成为禁止符号。这应该在非目录上下文中工作。
大约 2 年之前 回复
dongshao9106
dongshao9106 这是我第一次真正处理正则表达式,所以我还在学习。我确实尝试过regex101,它说它有效。基本上我只想将dir1/dir2/后的所有内容作为参数传递给shift.php。PHP脚本将处理验证URL。
大约 2 年之前 回复
duandai7601
duandai7601 小心保留字符。stackoverflow.com/q/1547899/2943403网址有规则-不仅可以使用哪些字符,还可以使用它们。你想要的网址对我来说似乎很奇怪。
大约 2 年之前 回复
doutinghou6980
doutinghou6980 您可以使用像regex101这样的东西来仔细检查正则表达式吗?虽然看起来过于复杂。
大约 2 年之前 回复
douqiang7462
douqiang7462 该模式使用字符类中的一些\u \e\c\e\s\a \y\e\s\c\a\p\i \g。
大约 2 年之前 回复

1个回答



不应</ strong>在URL中使用保留字符。 </ p>

虽然您可以进行URL编码,然后将其作为参数传递。 例如:</ p>

  http://localhost/dir1/dir2/shift.php?
param = http%3A%2F%2Flocalhost%2Fdir1%2Fdir2%2Fhttps%3A% 2F%2Fgoogle.com
</ code> </ pre>

然后在 shift.php </ code>中,您可以先对该参数进行URL解码,然后再使用。</ p>

</ div>

展开原文

原文

You should not use reserved characters in URL.

Though you can URL encode and then pass it as a parameter. For example:

http://localhost/dir1/dir2/shift.php?
param=http%3A%2F%2Flocalhost%2Fdir1%2Fdir2%2Fhttps%3A%2F%2Fgoogle.com

And then in shift.php you can first URL decode the parameter and then use.

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问