htaccess 正则表达式变量参数

htaccess regex variable parameter

我不习惯正则表达式,我想我已经浪费了太多时间来解决这个问题,所以我想寻求帮助。我正在尝试美化 html 扩展。

我的站点将使用具有可变参数的 URL。例如:

全部使用 .html 作为后缀。

在htaccess文件中,我试过了

RewriteRule ^(article\/[a-z].*)$ .html [NC,L]

还有一些细微的变化,但无法做到这一点。在此先感谢您的帮助。

首先,让我们看看您拥有的正则表达式:

^(article/[a-z].*)$

这与字符串“article/”完全匹配,后跟至少一个字母(由于 NC 标志不区分大小写),后跟零个或多个任意字符。它相当广泛,但应该与您提供的示例相匹配。

测试它是否匹配的一种方法是将 R=temp 标志添加到规则中,它告诉 Apache 将浏览器重定向到新的 URL(我建议使用“=temp”来阻止浏览器缓存重定向并使以后的测试更加困难)。然后您可以观察(例如在浏览器的 F12 调试控制台中)原始请求和重定向的请求。

RewriteRule ^(article/[a-z].*)$ .html [NC,L,R=temp]

但是,正如 CBroe 指出的那样,您的规则将在目标 URL 上再次匹配 ,因此您需要防止这种情况发生。一种简单的方法是使用 the END flag 而不是 L:

Using the [END] flag terminates not only the current round of rewrite processing (like [L]) but also prevents any subsequent rewrite processing from occurring in per-directory (htaccess) context.

所以:

RewriteRule ^(article/[a-z].*)$ .html [NC,END]

或者,您可以使模式更严格,例如将 .(“任意”)更改为 [^.](“点以外的任意”):

^(article/[a-z][^.]*)$

更具体地说,您可以添加带有额外模式的 RewriteCond 而不是 应用规则,例如“任何以 .html".