【问题标题】:Mod_Rewrite how to ignore slashes that don't belong in url stringMod_Rewrite 如何忽略不属于 url 字符串的斜杠
【发布时间】:2017-10-31 12:57:46
【问题描述】:

我正在尝试在我们的论坛中设置规范链接,我需要提出一个重写规则,该规则将忽略不属于 URL 的斜杠。

正确的 URL 如下所示:

http://www.truckingtruth.com/truckers-forum/Topic-20315/Page-1/speak-to-recruiter

为此,我使用以下 mod_rewrite 规则来传递“主题”、“页面”和“主题字符串”变量:

^Topic-(.*)/Page-(.*)/(.*)$ index.html?topic=$1&page=$2&subjectString=$3

但有时指向我们网站的不正确链接或评论中的不正确链接会在不属于该网址的 URL 中添加斜线,从而违反规则。示例:

http://www.truckingtruth.com/truckers-forum/Topic-1652/Page-1/www.truckingtruth.com/free_truck_driving_schools/swift/how-to-use-the-qualcomm

当这种情况发生时,传递的变量是:

主题 = "1652"

page = "1/www.truckingtruth.com/free_truck_driving_schools/swift"

subjectString = "how-to-use-the-qualcomm"

我想要它做的是通过:

主题 = "1652"

page = "1"

subjectString = "www.truckingtruth.com/free_truck_driving_schools/swift/how-to-use-the-qualcomm"

如何创建一个重写规则,将“Page-1”之后的所有内容作为主题字符串传递,即使其中有斜线?

【问题讨论】:

  • topicpage 总是整数吗?
  • 没有。页面可以是“最新”或“最后”或整数。主题始终是整数。
  • ^Topic-(\d*)/Page-([^/]*)/(.*)$ 应该这样做,regex101.com/r/7TNSa1/1
  • 做到了!惊人的!万分感谢。我不知道 regex101.com 甚至存在,所以这是双重奖励。谢谢。您能否将您的答案作为常规回复,以便我将其标记为正确?

标签: apache .htaccess mod-rewrite url-rewriting


【解决方案1】:

由于topic 始终为整数,因此对于您的第一个捕获组,您可以使用匹配任何十进制数字(相当于[0-9])的\d

对于page,请确保不包含任何斜线,[^/] 会处理这些问题。 其余的都应该转到第三个捕获组,因此生成的正则表达式将是:

^Topic-(\d*)/Page-([^/]*)/(.*)$

【讨论】:

  • 完美运行!谢谢!
猜你喜欢
  • 2011-06-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-08
  • 2019-06-25
  • 2014-04-08
  • 1970-01-01
相关资源
最近更新 更多