【问题标题】:Apache Rewrite map fails to process lines in map after certain pointApache Rewrite map 在某个点之后无法处理 map 中的行
【发布时间】:2014-10-18 03:58:05
【问题描述】:

我们的 apache 配置中有以下重写地图设置:

RewriteEngine on
RewriteMap modernmap txt:/etc/apache2/maps/salon/www.modernmap.com.txt
RewriteCond ${modernmap:$1|NOT_FOUND} !NOT_FOUND
RewriteRule ^(.+) ${modernmap:$1} [R=301,L]

文本文件包含大约 28,000 个条目,如下所示:

/url1 http://www.example.com/url2
/url3?id=3 http://www.example.com/url9?id=33

文本文件中前 24320 行的重写工作,然后在第 24320 行之后的所有重写都失败。我删除了第 24319、24320 和 24321 行的 URL,以防万一它们有问题并且问题仍然存在。

我已经在一个较小的子集上进行了尝试,但问题只是转移到了另一行。

我尝试将文本文件转换为 dbm 并使用 dbm,但同样的事情发生了。

我有点不知道下一步该做什么。

【问题讨论】:

  • 为什么您的地图包含查询字符串? RewriteRule 确实匹配主机名 + 有时前缀路径之后和第一个参数中的查询字符串之前的所有内容,因此永远不会匹配 /url3?id=3

标签: apache mod-rewrite hash url-rewriting dbm


【解决方案1】:

感谢 Sumurai8。你为我指明了正确的方向。我们现在的工作方式如下:

RewriteEngine on
RewriteMap modernmap txt:/etc/apache2/maps/salon/modernmap.txt

RewriteCond %{REQUEST_URI} ^(.+)
RewriteCond ${modernmap:%1?%{QUERY_STRING}} ^(.+)
RewriteRule ^(.+) %1? [R=301,L]

RewriteCond ${modernmap:$1|NOT_FOUND} !NOT_FOUND
RewriteRule ^(.+) ${modernmap:$1} [R=301,L]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-28
    • 1970-01-01
    相关资源
    最近更新 更多