【发布时间】:2021-11-17 15:54:42
【问题描述】:
我不习惯正则表达式,我想我已经浪费了太多时间试图解决这个问题,所以我想寻求帮助。我正在尝试美化 html 扩展。
我的网站将使用具有可变参数的 URL。例如:
- mysite.com/article/this-is-an-entry
- mysite.com/article/this-is-an-entirely-different-entry
所有将使用 .html 作为扩展名。
在htaccess文件中,我试过了
RewriteRule ^(article\/[a-z].*)$ $1.html [NC,L]
还有一些细微的变化,但无法做到这一点。提前感谢您的任何帮助。
【问题讨论】:
-
[a-z].*会要求一个字母,然后允许任意数量的任意字符。因此,您的模式应该已经与这两种示例 URL 格式匹配。 “但无法做到这一点” - 会发生什么 - 你得到 404、500、...? -
您正试图简单地从
article/this-is-an-entry重写为article/this-is-an-entry.html,是吗?您的模式将再次匹配后一个 URL,因此article/this-is-an-entry.html将被重写为article/this-is-an-entry.html.html下一个。依此类推,依此类推 - 直到达到内部重定向限制。 -
"您正试图简单地从 article/this-is-an-entry 重写为 article/this-is-an-entry.html,是吗?"是的,这是对的。我收到 404 错误通知“找不到对象!”
-
您要么需要找到一种方法来防止
article/this-is-an-entry.html再次被重写(比如在您的模式中更具体,例如不允许任何点) - 或者您将其与 RewriteCond检查附加了.html的请求是否与现有文件匹配,并且仅在这种情况下让重写继续进行。 (为此做一些细节研究,这是很常见的事情。) -
@CBroe 好点,但仅供参考,最简单的解决方案是在标志中使用
END而不是L。请参阅下面的答案。