正则表达式将URL与参数匹配但拒绝URL与子文件夹

时间:2015-12-10 23:58:32

标签: regex

简短问题:什么正则表达式语句将匹配URL上的参数但不匹配子文件夹?例如,匹配google.com?parameter但不匹配google.com/subdomain

长问题:我正在重定位网站上的几个网址。

我想要ilovestarwars.com/page2的请求重定向ilovestarwars.com/forceawakens

我设置了这个重定向,它大部分时间都很好用。问题是有URL参数时。例如,如果有人使用跟踪链接的电子邮件程序发送URL。然后ilovestarwars.com/page2在发送后会ilovestarwars.com/page2?parameter=trackingcode123变为ilovestarwars.com/page2(.*),这会在我的网站上产生404,因为它正在寻找确切的网址。

没问题,我会使用正则表达式。所以我现在重新使用ilovestarwars.com/page2/mistake并且它很好地接受所有参数,不再有404s。

然而,为了将来证明我的工作,我担心,如果有人在page2文件夹中添加内容会发生什么?例如page2(.*?)/

他们不应该,但如果他们这样做,他们将永远地想出它为什么重定向。

所以我的问题是,如何创建一个匹配参数但拒绝子文件夹的正则表达式语句?

我按照建议in this answer尝试#include <stdio.h> int main() { int grade; int r=0; while(r != 1) { scanf("%i", &grade); switch(grade) { case 10: case 9: printf("Your grade is an A\n"); r=1 break; case 8: printf("Your grade is a B\n"); r=1 break; case 7: printf("Your grade is a C\n"); r=1 break; case 6: printf("Your grade is a D\n"); r=1 break; case 5: case 4: case 3: case 2: case 1: case 0: printf("Your grade is an F\n"); r=1 break; default: printf("Invalid score, please re-enter\n"); break; } } return 0; } ,但https://www.regex101.com/说斜杠是未转义的分隔符。

背景信息as suggested here,我正在使用Wordpress和Redirection plugin。这个is the article会覆盖我设置的初始重定向。

1 个答案:

答案 0 :(得分:1)

您问题的直接答案如下:^/([^?&/\]*)(.*)$

这假设字符串从第一个/开始(如果没有,则删除/后面的^)。在第一个捕获组中,您将获得页面名称(在示例URL的情况下为page2),在第二个捕获组中,您将获得URL的剩余部分(以下其中一个字符之后的任何内容:{{1} },?&/)。如果您不关心第二个捕获组,请使用\

间接答案是你不这样做。相反,文件夹^/([^?&/\]*).*$中应该有一个索引页面,它使用301 redirect重定向到正确的页面。静态地做这件事会更有意义。我知道你可能没有那么多控制你的网页,因为它是Wordpress,在这种情况下,前一个答案应该适用于给定的插件。