【问题标题】:htaccess RewriteRule match special characters in URL-pathhtaccess RewriteRule 匹配 URL-path 中的特殊字符
【发布时间】:2018-02-07 11:27:19
【问题描述】:

我需要一些关于正确 RewriteRule 的帮助。

需要以 JSON 字符串结尾的 URL:

http://hns/log/r/%7B"start":%5B55.70980850022872,37.505353142456336%5D,"end":%5B55.70980850022872,37.77039830847196%5D,"points":%5B%5B55.67529029803404,37.62070958776883%5D%5D,"method":"1","optimization":"1","center":%5B55.731512133266634,37.71615331335479%5D,"zoom":10%7D

重定向到

http://hns/log/r/index.html

无需更改浏览器中的 URL。

.htaccess 是:

RewriteEngine on
RewriteBase /log/r/
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
#RewriteRule ^([^/]+)$ ./index.html?catalog=$1[L]
RewriteRule ^([A-Za-z0-9?;:,{}\"]+)$ ./index.html [L]

它适用于以下 URL:http://hns/log/r/,132a。 但不适用于以下 URL:http://hns/log/r/,132a: 或引号 (") 或 JSON 字符串。

如何正确重定向此类 URL?

【问题讨论】:

  • 这个.htaccess 文件在哪里?我认为它必须在/logist/route/.htaccess/log/r//logist/route/ 的简写吗?还是完全不同的 URL 路径?
  • 抱歉,重定向应该是http://hns/log/r/index.html。 .htaccess 文件位于http://hns/log/r

标签: .htaccess mod-rewrite


【解决方案1】:

看起来您可能正在 Windows 机器上进行测试?在 Windows 操作系统上,冒号 (:) 和引号 (") 字符不允许使用文件名字符。因此,当 Apache 尝试将请求映射到文件系统路径时(如果 /log/r 是文件系统目录,它将执行此操作),无论您的 mod_rewrite 如何,您都会收到错误(这可能导致 Apache 服务 403 Forbidden)正则表达式,其中已经包含这些字符。

Windows 上其他禁止使用的文件名字符:\/:*?"<>|

如果您需要它在 Windows 上工作,那么您需要更改您的 URL 结构。例如。使用 PATH_INFO 或查询字符串。

但是,您现有的代码应该已经在 Linux 机器上运行http://hns/log/r/,132a:(包含冒号)或引号(")字符形式的 URL。

http://hns/log/r/%7B"start":%5B55.70980850022872,37.505353142456336%5D,"end":%5B55.70980850022872,37.77039830847196%5D,"points":%5B%5B55.67529029803404,37.62070958776883%5D%5D,"method":"1","optimization":"1","center":%5B55.731512133266634,37.71615331335479%5D,"zoom":10%7D

但是,发布的代码不适用于上述格式的 JSON 字符串,因为您没有包含所有必要的字符。您缺少[].(点/句点)。请注意,RewriteRule pattern 与 %-decoded URL-path 匹配。所以,应该这样写:

RewriteRule ^([A-Za-z0-9?;:,{}"\[\].]+)$ index.php [L]

另外请注意,我已经删除了 RewriteRule 上的 ./ 前缀替换。不需要前缀./(也不是严格正确的)。如果前缀为./ mod_rewrite 只会将替换视为相对(即它不以斜杠或scheme+主机名开头),并将简单地应用目录前缀。在这种情况下,生成的 URL 路径将是 /log/r/./index.php - 但是,这仍然可以由操作系统正确解析并且“有效”。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-13
    • 1970-01-01
    相关资源
    最近更新 更多