将丑陋的 URL 重定向到更干净的版本和/或同时重写它们

发布于 2024-11-10 04:55:53 字数 136 浏览 0 评论 0原文

我一直在寻找将 http://www.mysite.com/about.html 更改为 http://www.mysite.com/about 的方法,但没有到目前为止运气好。

这可能吗?

I have been searching for ways to change http://www.mysite.com/about.html to http://www.mysite.com/about but had no luck so far.

Is this possible?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

梦里南柯 2024-11-17 04:55:53
RewriteEngine On
RewriteCond %{THE_REQUEST} \.html
RewriteRule ^(.+)\.html$ /$1 [R=301,L]
RewriteCond %{REQUEST_FILENAME}\.html -f
RewriteRule ^(.+)$ $1.html

第 2-3 行处理原始请求包含 .html 的情况。该请求通过 [R=301] 标志转换为 301 重定向,并通过 [L] 标志终止进一步处理。

第 4 行充当第 5 行的条件。第 5 行执行正常 URL 重写。我只是将 .html 附加到任何不以 .html 结尾的 URL。

了解递归:

如果没有 RewriteCond[L] 标志,规则将创建无限循环。

  1. 诸如 about.html 之类的请求在第 3 行变为 about,并在第 5 行变为 about.html[R] 可以防止这种情况发生。
  2. 诸如 about 之类的请求将在第 5 行变为 about.html,然后 mod_rewrite 再次处理该 URL,以便第 3 行将其更改回 about >;但 RewriteCond 会阻止这种情况,因为它检查浏览器发送的原始请求,而不是重写的请求。
RewriteEngine On
RewriteCond %{THE_REQUEST} \.html
RewriteRule ^(.+)\.html$ /$1 [R=301,L]
RewriteCond %{REQUEST_FILENAME}\.html -f
RewriteRule ^(.+)$ $1.html

Lines 2-3 take care of the case when the original request contains .html. This request is translated to a 301 redirect via [R=301] flag and further processing is terminated via the [L] flag.

Line 4 acts as a condition for line 5. Line 5 does the normal URL rewriting. I just appends .html to any URL does not end with .html.

Understanding the recursion:

Without the RewriteCond and [L] flags, the rules will create an infinite loop.

  1. A request such as about.html becomes about on line 3 and becomes about.html on line 5. [R] prevents that.
  2. A request such as about will become about.html on line 5, then mod_rewrite processes this URL again so that line 3 will change it back to about; but the RewriteCond will prevent that because it checks the original request sent by the browser, not the re-written one.
简单 2024-11-17 04:55:53

尝试将其添加到您的 .htaccess 中:

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.html -f
RewriteRule ^(.*)$ $1.html

try to add this in your .htaccess:

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.html -f
RewriteRule ^(.*)$ $1.html
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文