【问题标题】:htaccess regex not accepting some special charactershtaccess 正则表达式不接受某些特殊字符
【发布时间】:2018-07-13 22:13:50
【问题描述】:

我有一个位于 http://localhost/dir1/dir2/shift.php 的 PHP 脚本,我将 url 作为参数传递,如下所示:http://localhost/dir1/dir2/https://google.com 但我收到了禁止访问错误。当我删除 : 它工作正常。我用一些在线正则表达式验证工具检查了我的正则表达式,它说它应该可以工作,但它没有

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

任何帮助都会很棒。谢谢!

【问题讨论】:

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

标签: php regex apache .htaccess mod-rewrite


【解决方案1】:

不应在 URL 中使用保留字符。

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

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

然后在shift.php可以先对参数进行URL解码,然后使用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多