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

时间:2011-05-27 08:24:03

标签: apache mod-rewrite redirect

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

这可能吗?

2 个答案:

答案 0 :(得分:1)

尝试在.htaccess中添加:

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

答案 1 :(得分:1)

RewriteEngine On
RewriteCond %{THE_REQUEST} \.html
RewriteRule ^(.+)\.html$ /$1 [R=301,L]
RewriteCond %{REQUEST_FILENAME}\.html -f
RewriteRule ^(.+)$ $1.html
原始请求包含 .html 时,

第2-3行会处理这种情况。此请求通过[R=301]标志转换为301重定向,并通过[L]标志终止进一步处理。

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

了解递归:

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

  1. about.html 等请求在第3行变为,并在第5行变为 about.html [R]防止这种情况。
  2. 等请求将在第5行变为 about.html ,然后mod_rewrite再次处理此网址,以便第3行将其更改回 about ;但是RewriteCond会阻止它,因为它会检查浏览器发送的原始请求,而不是重写的。