微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用 mod_rewrite 重定向太多最多一个重定向?

如何解决使用 mod_rewrite 重定向太多最多一个重定向?

我希望最多有一个使用我的 htaccess 文件重定向。这可能吗?

我的 htaccess 文件

RewriteEngine On
#remove index/index.html
RewriteRule index\.html|index https://example.com/ [R=301,L]

#redirect to non-wwww and https site
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ https://%1/$1 [R=301,L]

RewriteCond %{THE_REQUEST} ^GET\ /(.+)\.html [NC]
RewriteRule ^ /%1? [R=301,L]

#remove .html
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^\.]+)$ $1.html [NC,L]

如果我输入例如 http://example.com/foo.htmlhttp://example.com/index 那么我有两个重定向

如果我输入例如 http://example.com/https://example.com/foo.html,那么我只有一个重定向

我想要的:

  • 我最多需要一个重定向(参见最后两个示例)。
  • 如果我导航到主页,那么我总是希望删除 index/index.html
  • 所有 http 调用都应重定向到 https 调用
  • 所有带 www 的 URL 都应该不带 www 调用
  • 如果我导航到子页面 (https://example.com/foo.html),那么只应分别删除 html,用户可以在没有 .html (https://example.com/foo) 的情况下调用页面

这可能吗?目前有时会发生两次重定向

解决方法

您能否根据显示的示例尝试以下操作。请确保在测试 URL 之前清除浏览器缓存。

RewriteEngine ON
##Apply https and remove www together for all requests here.
RewriteCond %{HTTP_HOST} ^(?:www\.)?(.*)$ [NC]
RewriteRule ^(.*)$ https://%1%{REQUEST_URI} [NE,L]

##Server files with backend .html files.
RewriteCond %{REQUEST_FILENAME}.html -f
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteRule ^(.*)$ $1.html [L]

##Deal with home page .html stuff here.
RewriteCond %{REQUEST_URI} ^/?$
RewriteRule ^(.*)$ index/index.html [L]

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。