【问题标题】:RewriteRule to remove all slashesRewriteRule 删除所有斜线
【发布时间】:2025-12-12 04:45:01
【问题描述】:

您好,我已经尝试了所有方法,但找不到解决方案。 当用户访问此网址时

我希望它重写(不使用重定向)

如何删除 '/' ? 非常感谢您的帮助。

【问题讨论】:

  • 谢谢它有效 是的,它总是有 3 个斜杠,但我只包含一个查询参数,还有 2 个其他 qs= 和 d= 这是一个真正的调用 mtdomain.com/B/13/B0/… 当我传入其他查询字符串时停止工作。循环示例似乎进入了无限循环我需要一个 [L] 在哪里停止它吗?

标签: apache .htaccess mod-rewrite


【解决方案1】:

尝试使用此规则(您的 htaccess 必须位于文档根文件夹中)

RewriteCond %{QUERY_STRING} ^pid=([0-9]+)$
RewriteRule ^/?([^/]+)/([^/]+)/([^/]+)/([^/]+)\.jpg$ /$1$2$3$4.jpg?pid=%1 [L]

编辑:此代码仅适用于您的示例中的网址(在查询字符串中使用 3 个斜杠和 pid

EDIT2:如果您有多个参数(可能以不同的顺序),为了简化查询字符串,我们不再需要 RewriteCond 而是 QSA 标志

RewriteRule ^/?([^/]+)/([^/]+)/([^/]+)/([^/]+)\.jpg$ /$1$2$3$4.jpg [L,QSA]

【讨论】:

  • 这只会删除前 3 个斜杠。如果还有更多,这些将保留。
  • 我仅以问题中的 URL 为例。你可能是对的 - 我不知道,我根本不想批评你的答案 - 但在不同的 URL 中可能有任意数量的斜杠需要删除,而不仅仅是 3 个。跨度>
  • 你是对的。我回答了关于 OP 的例子。让我们看看它是什么,也许他的网址中有更多的斜线
  • 我将永远有 3 个斜杠,谢谢你...我有更多查询字符串(pid、qs 和 d)我如何修改你的示例以包含其他查询字符串?
  • 我在回答中为此添加了一条规则
【解决方案2】:

如果该规则应该删除任意数量的斜线,而不仅仅是固定数量,则必须创建一个循环。为此,您可以使用\[N\] flag,这将导致重写过程从当前 URL 重新开始。这样做时要小心,如果做错了,这可能会导致无限循环;)

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

不过应该​​可以。你可以测试一下with this online tool

[编辑]:完全重写 - 我忘记了 [N] 标志;)

【讨论】:

  • 感谢您链接该工具。这很有用!
最近更新 更多