【问题标题】:match multiple slashes in url, but not in protocol匹配 url 中的多个斜杠,但不匹配协议
【发布时间】:2016-07-19 11:15:17
【问题描述】:

我尝试在 url 的 ende 或内部捕获多个斜杠,但不是那些放置在协议(http://、https://、ftp:// 之后的斜杠(可能是两个或更多))文件:///)

我在类似的 SO 线程中尝试了许多发现,例如 ^(.*)//+(.*)$[^:](\/{2,}),或 ^(.*?)(/{2,})(.*)$ 中的 http://www.regexr.com/https://regex101.comhttp://www.regextester.com/。但对我来说没有什么明确的。

这很奇怪,我找不到一个可行的例子——这个目标不是那么稀有。有人可以分享一个有效的正则表达式吗?

【问题讨论】:

  • 什么是正则表达式?
  • @anubhava: no:( 用我上面引用的三个站点进行了测试,不起作用。试图逃避 slahes - 同样,不起作用。
  • @WiktorStribiżew 用于 apache/htaccess
  • 这里,(?:https?|ftps?|file)://(*SKIP)(*F)|// - 不确定它是否适用于 htaccess,anubhava 将帮助您更好地解决此问题
  • @WiktorStribiżew,没有:(错误:regex101.com/r/nF5mI1/1

标签: regex .htaccess


【解决方案1】:

您可以在站点根目录 .htaccess 中使用以下规则从输入 URL 的任意位置去除多个斜杠:

RewriteEngine On

RewriteCond %{THE_REQUEST} //
RewriteRule ^.*$ /$0 [R=301,L,NE]

THE_REQUEST 变量表示 Apache 从您的浏览器收到的原始请求,并且在执行某些重写规则后它不会被覆盖。此变量的示例值为GET /index.php?id=123 HTTP/1.1

RewriteRule 中的模式自动将多个斜杠转换为一个。

【讨论】:

猜你喜欢
  • 2021-03-14
  • 1970-01-01
  • 2013-05-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-08-19
  • 2021-05-06
  • 1970-01-01
相关资源
最近更新 更多