正则表达式将 .html 附加到子目录文件

问题描述 投票:0回答:1

在 Apache 上,我希望将 .html 附加到子目录 /article 中出现的所有 URL。

在htaccess文件中,我已经尝试过了

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

但这不起作用。预先感谢您的任何帮助。

regex .htaccess
1个回答
0
投票

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

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

这与字符串“article/”完全匹配,后跟至少一个字母(由于

NC
标志,不区分大小写),后跟零个或多个任何内容。它相当广泛,但应该与您给出的示例相匹配。

测试其匹配的一种方法是将

R=temp
标志添加到规则中,该标志告诉 Apache 将浏览器重定向到新的 URL(我建议使用“=temp”来停止浏览器缓存重定向并进行稍后进行更努力的测试)。然后,您可以观察(例如在浏览器的 F12 调试控制台中)原始请求和重定向的请求。

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

但是,正如 CBroe 指出的那样,您的规则将在目标 URL 上匹配 again,因此您需要防止这种情况发生。一个简单的方法是使用

END
标志 而不是
L
:

使用 [END] 标志不仅终止当前轮的重写处理(如 [L]),还可以防止在每个目录 (htaccess) 上下文中发生任何后续重写处理。

所以:

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

或者,您可以使模式更严格,例如将

.
(“任何内容”)更改为
[^.]
(“点以外的任何内容”):

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

更具体地说,您可以添加带有额外模式的

RewriteCond
应用规则,例如“任何以
.html
结尾的内容”。

© www.soinside.com 2019 - 2024. All rights reserved.