代码之家  ›  专栏  ›  技术社区  ›  Lee Cheung

百分比符号(或%25)在路径中不起作用

  •  0
  • Lee Cheung  · 技术社区  · 6 年前

    我正在尝试将用户从以下位置重定向:

    http://example.com/search?poster=ABC123 http://example.com/name/ABC123

    $_GET['poster'] 变量I还允许用户输入通配符搜索(%)。问题就出在这里。当用户输入 % (转换为 %25

    Forbidden
    You don't have permission to access /name/%25test on this server.
    Additionally, a 403 Forbidden error was encountered while trying to use an ErrorDocument to handle the request.
    

    但是,在字符串的其他任何地方使用通配符都可以。

    这是我的.htaccess文件。

    Options -MultiViews
    RewriteEngine On
    Options -Indexes
    
    RewriteBase /search
    RewriteCond %{REQUEST_FILENAME}  !-d
    RewriteCond %{REQUEST_FILENAME}  !-f
    RewriteCond %{REQUEST_FILENAME}  !-l
    RewriteRule ^name/(.+)$ /?poster=$1 [QSA,L]
    RewriteRule ^content/(.+)$ /?content=$1 [QSA,L]
    RewriteRule ^title/(.+)$ /?title=$1 [QSA,L]
    

    http://archive.rookstat.net/name/%25he <--- Error
    http://archive.rookstat.net/name/he%25 <--- Works
    http://archive.rookstat.net/name/hello <--- Works
    

    我该怎么解决?我在重写规则中尝试了许多不同的组合,但我肯定做错了。旗子不正确吗?用户输入通配符并不总是这样。因此,我不想使用专门查找“%”或“%25”的规则,但如果用户确实输入了该规则,则不应认为它是文件夹或文件。。。或者别的什么。

    http://archive.rookstat.net/search/?poster=%he
    

    似乎它认为这是一个文件路径,而不是一个url。。。

    2 回复  |  直到 6 年前
        1
  •  1
  •   Jamie_D    6 年前

    百分比(%)符号是为url编码字符保留的。我建议使用base64编码输入的搜索项,然后在搜索函数中解码

    $query = base64_encode($wildcard_query);
    
    $search_term = base64_decode($_GET['poster']);
    
        2
  •  0
  •   hakre Alister Bulman    6 年前

    请试试 B 重新编码回溯引用的标志

    (文档中的示例与您的用例完全匹配,我无法更好地解释它)。