htaccess 正则表达式变量参数
htaccess regex variable parameter
我不习惯正则表达式,我想我已经浪费了太多时间来解决这个问题,所以我想寻求帮助。我正在尝试美化 html 扩展。
我的站点将使用具有可变参数的 URL。例如:
- 我的网站.com/article/this-is-an-entry
- 我的网站。com/article/this-is-an-entirely-different-entry
全部使用 .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
".
我不习惯正则表达式,我想我已经浪费了太多时间来解决这个问题,所以我想寻求帮助。我正在尝试美化 html 扩展。
我的站点将使用具有可变参数的 URL。例如:
- 我的网站.com/article/this-is-an-entry
- 我的网站。com/article/this-is-an-entirely-different-entry
全部使用 .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
".