.htaccess重写合并

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了.htaccess重写合并相关的知识,希望对你有一定的参考价值。

我目前在.htaccess文件中有两个重写规则,现在需要添加另一个。但是,GTMetrix已经在这里给我一个F评级,说明:避免登陆页面重定向

  1. 第一个重定向将www.添加到URL。
  2. 第二个重定向将一个子目录添加到URL。
  3. 第三个(建议的)重定向将https添加到URL的开头。
RewriteEngine on

#First rewrite any request to the wrong domain to use the correct one (here www.)
RewriteCond %{HTTP_HOST} !^www.
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

#Then, rewrite to /catalog
RewriteCond %{REQUEST_URI} !^/catalog [NC]
RewriteRule ^(.*)$ /catalog/$1 [L]

#Now, rewrite to HTTPS:
#RewriteCond %{HTTPS} off
#RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

有没有办法将这些组合成一个重定向?或者,着陆页重定向不是那么糟糕吗?

答案

您的第1和第3个重定向规则可以合并为一个,并且应该在重写规则之前保留:

RewriteEngine On

# add www and turn on https in same rule
RewriteCond %{HTTP_HOST} !^www. [NC,OR]
RewriteCond %{HTTPS} off
RewriteCond %{HTTP_HOST} ^(?:www.)?(.+)$ [NC]
RewriteRule ^ https://www.%1%{REQUEST_URI} [R=301,L,NE]

#Then, rewrite to /catalog
RewriteCond %{REQUEST_URI} !^/catalog/ [NC]
RewriteRule ^(.*)$ /catalog/$1 [L]

在测试此更改之前,请务必清除浏览器缓存。

以上是关于.htaccess重写合并的主要内容,如果未能解决你的问题,请参考以下文章

DirectAdmin Apache - .htaccess 重写

.htaccess 用问号重写 URL

协助 .htaccess 文件夹重写

htaccess 单参数重写规则

HTACCESS 重写:忽略语言代码并将 index.php 添加到 url 而不更改它

子文件夹中的重写 .htaccess