【问题标题】:.htaccess - ADD www. & REMOVE .html.htaccess - 添加 www。并删除 .html
【发布时间】:2021-04-08 13:38:08
【问题描述】:

嗨!我的英文不是很好,如有拼写错误,请见谅。

使用 .htaccess 我想添加 www.删除/隐藏 .html

它应该看起来像这样:

之前 -- http://example.com/whatever.html

之后 ----- http://www.example.com/whatever

我有.www加法器:

RewriteCond %{HTTP_HOST} ^example.com [NC]
RewriteRule ^(.*)$ http://www.example.com/$1

还有.html卸妆

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)\.html$ /$1 [N]

如何连接它们?

注意:它想从我页面上的每个.html 文件中删除/隐藏.html

我使用这个工具来测试我的 .htaccess 文件:https://htaccess.madewithlove.be

感谢您的帮助。

【问题讨论】:

  • "...并将 https:// 替换为 http://" - 为什么?您真的不应该从 HTTPS 重定向到 HTTP(即向后)。为了从 HTTPS 重定向 ,无论如何您都需要已经通过 HTTPS 成功连接,所以这使得该过程开始时毫无意义。
  • “我不想将 /whatever.html 更改为 /whatever/” - 但这正是您在示例中所做的?您声明要删除.html,但在您的示例中,您还附加了一个您在要求中实际上没有提及的斜杠? “它想从我页面上的每个 .html 文件中删除 .html。” - 虽然这不是你应该在.htaccess 中做的事情。您需要先删除页面上实际链接中的.html。然后,您使用.htaccess 再次在内部重写 URL。
  • “我使用这个工具来测试我的 .htaccess 文件” - 您需要在真实服务器上测试您的规则。不幸的是,那个工具搞错了。它没有正确处理“链式”规则,也没有提醒您注意重定向循环。您发布的规则会导致到http://www.example.com/whatever// 的无限重定向循环。
  • 你说得对,我不是.htaccess 专家。这就是我需要帮助的原因。我对https 有一些问题,所以我想重定向到http。但是当我想到它时,它没有任何意义。无论如何,我在添加 www. 和删除 .html 时仍然遇到问题,因为当您像这样添加 www. 时:RewriteCond %{HTTP_HOST} ^example\.com$ RewriteRule ^$ http://www.example.com/$1 它就像重定向一样,我无法删除 .html
  • 啊,在这种情况下,您根本不想删除 .html 扩展名!实际上,您想做完全相反的事情...接受不带扩展名的请求并将请求重定向到规范 URL(with 扩展名)。您最初描述问题的方式以及示例代码,看起来您想从您的 URL 中删除 .html 扩展名,以使它们看起来“漂亮”。

标签: .htaccess http redirect mod-rewrite url-rewriting


【解决方案1】:

您能否尝试以下操作,仅基于您显示的示例。请确保在测试 URL 之前清除浏览器缓存。根据 Mr.White 的建议,在 RewriteRule 部分添加条件以避免将 css 或 js 文件传递​​给规则。

RewriteEngine ON
RewriteCond %{REQUEST_FILENAME}.html -f
RewriteRule !\.\w{2,4}$  http://www.%{HTTP_HOST}%{REQUEST_URI}.html [L]

【讨论】:

  • 终于!整个问题是我试图从链接中删除 html。事实上,它必须完全相反。抱歉我的推理不正确。一周前我学习了.htaccess 的基础知识,因为我只需要在我的网站上进行一些操作。谢谢。
  • @KondRoll,欢迎您,这不是我们都知道的问题。欢呼和快乐的学习,继续在这个伟大的网站上发布好的问题和答案。
  • 与检查每个请求相比,排除还没有.html扩展名或没有任何文件扩展名的请求会更有效一点也不。例如。 !\.\w{2,4}$.
  • 不,!\.\w{2,4}$ 代替 ^(.*)。正则表达式^(.*) 自然匹配一切,包括对所有静态资源的请求,例如。 styles.css。对styles.css.html 进行文件系统检查(相对昂贵)是没有意义的,因此通过使用像!\.\w{2,4}$ 这样的正则表达式,我们可以避免匹配任何“看起来”它们已经映射到文件的URL .只有当我们请求styles(无扩展名)时,它才会测试styles.html
  • @MrWhite,哦,好吧,我想知道了,RewriteRule !\.\w{2,4}$ http://www.%{HTTP_HOST}%{REQUEST_URI}.html [L] 这对你来说好看吗?在我发布它来回答之前,你能告诉我这是否好看:) 干杯。
猜你喜欢
  • 2014-08-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-19
  • 2014-06-19
  • 1970-01-01
  • 2017-04-22
相关资源
最近更新 更多