在 Apache 上,我希望将 .html 附加到子目录 /article 中出现的所有 URL。
在htaccess文件中,我已经尝试过了
RewriteRule ^(article\/[a-z].*)$ $1.html [NC,L]
但这不起作用。预先感谢您的任何帮助。
首先,让我们看看您拥有的正则表达式:
^(文章/[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
结尾的内容”。