【问题标题】:negating rewrite rules for apache否定apache的重写规则
【发布时间】:2016-10-13 07:12:24
【问题描述】:

我正在尝试这样做,以便如果 URL 的结尾包含围绕数字的任何内容(除了第一部分可以是数字、连字符或 ap 的任意组合),那么 url 将被重定向到任何围绕号码被取消了。

这是我的正则表达式:

RewriteRule ^all/[^p^P^0-9^\-]+([0-9]+).*$ /allof/$1 [R=301,NC,L]

如果我尝试了这些测试 URL,应该会发生重定向,但不会:

http://example.com/all/-a*1
http://example.com/all/plus100

如果我尝试了这个测试 URL,重定向不会发生,这是正确的:

http://example.com/all/p1-100

如果我尝试了这些测试 URL,则会发生重定向,这是正确的:

http://example.com/all/(100) - redirects to http://example.com/allof/100
http://example.com/all/minus100 - redirects to http://example.com/allof/100

也许我的正则表达式有问题。我尝试删除方括号中除第一个之外的额外插入符号,但这没有帮助,我不想只用 .* 替换方括号,因为这样我将无法捕获数字。我可能做错了什么?

【问题讨论】:

  • 您能准确地说明您要做什么吗?如果可能,请提供重定向前后的示例 URL 列表。
  • 在 URL 中,最右边斜线后面的所有内容都只能是数字。必须删除位于相同斜线和数字之间的任何内容(不是数字)。数字之后的任何东西(不是数字)也必须被删除。我试图编辑我的问题,但系统不允许。
  • 您应该显示您的预期输出。例如,对于http://example.com/all/p1-100,您的预期输出是什么...?

标签: regex apache .htaccess redirect mod-rewrite


【解决方案1】:

您可以在规则中使用负前瞻:

RewriteRule ^all/(?!p\d*-)\D*(\d+) /allof/$1 [R=301,NC,L]

RegEx Demo

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-09-02
    • 2011-10-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多