将长 URL 重定向到 https

Posted

技术标签:

【中文标题】将长 URL 重定向到 https【英文标题】:redirecting a long URL to https 【发布时间】:2017-07-15 20:30:26 【问题描述】:

在解决了我的 issue 以避免重定向 URL 的特定部分之后,我现在正在尝试解决将较长、更复杂的 URL 重定向到 https 的问题

这是我的 .htaccess 文件中给我问题的行:

RewriteRule ^(.+)$ index.php?uri=$1 [QSA,L]

index.php 永远不会在 URL 本身中公开。例如,此 URL 应重定向到 https:

http://bootstrapcovers.com/themes/bootstrap-themes/toolsmith-1110/volvox-responsive-html5-bootstrap-template

输入网址后重定向到:

[https://bootstrapcovers.com/index.php?uri=themes/bootstrap-themes/toolsmith-1110/volvox-responsive-html5-bootstrap-template][2]

请注意,添加了 index.php?uri=,这是我所期望的,但页面被重定向回主页。如果我删除该部分 (index.php?uri=),则 url 有效!

如何在不添加 index.php?uri= 的情况下重定向 URL?

这是我完整的 .htaccess 文件:

# 1 Month for most static assets
<filesMatch ".(css|jpg|jpeg|png|gif|js|ico|woff)$">
Header set Cache-Control "max-age=2592000, public"
</filesMatch>
<IfModule mod_headers.c>
  <FilesMatch "\.(ttf|ttc|otf|eot|woff|font.css|css)$">
    Header set Access-Control-Allow-Origin "*"
  </FilesMatch>
</IfModule>

Options -MultiViews
RewriteEngine on
RewriteRule ^(.+?)/$ /$1 [R=302,NE,L]
RewriteBase /
RewriteCond %REQUEST_FILENAME !-f
RewriteCond %REQUEST_FILENAME !-d

RewriteRule ^(.+)$ index.php?uri=$1 [QSA,L]

RewriteCond %HTTPS off
RewriteCond %THE_REQUEST !\s/+preview [NC]
RewriteRule ^(.*)$ https://%HTTP_HOST%REQUEST_URI [NE,L,R=301]

RewriteCond %HTTPS on
RewriteCond %THE_REQUEST \s/+preview [NC]
RewriteRule ^ http://%HTTP_HOST%REQUEST_URI [NE,L,R=301]

我们将不胜感激任何解决此问题的帮助。

谢谢, -保罗

【问题讨论】:

【参考方案1】:

您需要对规则进行重新排序和重构。这样做:

# 1 Month for most static assets
<filesMatch ".(css|jpg|jpeg|png|gif|js|ico|woff)$">
Header set Cache-Control "max-age=2592000, public"
</filesMatch>
<IfModule mod_headers.c>
  <FilesMatch "\.(ttf|ttc|otf|eot|woff|font.css|css)$">
    Header set Access-Control-Allow-Origin "*"
  </FilesMatch>
</IfModule>

Options -MultiViews
RewriteEngine on
RewriteBase /

RewriteCond %HTTPS off
RewriteCond %THE_REQUEST !\s/+preview [NC]
RewriteRule ^(.*)$ https://%HTTP_HOST%REQUEST_URI [NE,L,R=301]

RewriteCond %HTTPS on
RewriteCond %THE_REQUEST \s/+preview [NC]
RewriteRule ^ http://%HTTP_HOST%REQUEST_URI [NE,L,R=301]

RewriteCond %REQUEST_FILENAME !-d
RewriteRule ^(.+?)/$ /$1 [R=301,NE,L]

RewriteCond %REQUEST_FILENAME !-f
RewriteCond %REQUEST_FILENAME !-d
RewriteRule ^(.+)$ index.php?uri=$1 [QSA,L]

确保在测试此更改之前清除浏览器缓存。

【讨论】:

anubhava,我的网址中没有 uri 参数...这甚至是必要的吗?感谢您的反馈 但我的回答中没有提到url argument。如果你写了这个要求,我的回答是:How can I redirect the URL without the addition of index.php?uri=? 你是否在清除浏览器缓存后测试了我建议的更改。 我确实测试了您的更改,一切正常。当我删除 .htaccess 文件中的最后一个条目时,它失败了。我的网址都没有使用这种格式(index.php?uri=)所以我想我不明白为什么它会失败......

以上是关于将长 URL 重定向到 https的主要内容,如果未能解决你的问题,请参考以下文章

markdown [www和https重定向]将所有文件重定向到https url和www域名#www #htaccess

Rails 使用 https 重定向

为特定的 url 设置从 http 到 https 的 apache 重定向

从 http 重定向到 https 时,从 url 中删除斜线

将一些 HTTP URL/AAM 重定向到 HTTPS

localhost 重定向到 https 并循环 url