mod-rewrite:替换 URL 中的某些字符

mod-rewrite:替换 URL 中的某些字符

是否可以在 RewriteRule 中将 URL 中的某些正斜杠 (/) 替换为点 (.)?这不一定非要使用 RewriteRule 来完成,但绝对不能使用脚本。

示例 1:

输入:/document/my/document.html
输出:/document-my.document.html

示例 2:

输入:/document/depth/of/path/can/vary.html
输出:/document-depth.of.path.can.vary.html

答案1

我认为你可以使用迭代方法来实现这一点。“可变替换次数”意味着你必须多次使用相同的规则,每个要替换的“/”使用一个规则。

尝试这个:

RewriteRule ^/([^/]+)/(.*)$ /$1.$2 [N]

一些细节:

  • 模式匹配/+ 任意内容 + /+ 任意内容
  • 您需要/明确匹配第一个,因为它将始终存在,并且不能被替换为.
  • [N]标志的含义是:(Re-run the rewriting process (starting again with the first rewriting rule). This time, the URL to match is no longer the original URL, but rather the URL returned by the last rewriting rule.Apache mod_rewrite 文档

答案2

什么有效(感谢乔纳森克拉克的回答):

RewriteCond %{REQUEST_URI} ^/document.*
RewriteRule ^/([^/]+)/(.*)$ /$1.$2 [N]
RewriteRule ^/document\.(.*)\.html /document-$1 [L]

相关内容