apache https跳转 和 整站301重定向问题

in 积露为波 with 0 comment

装了宝塔面板,服务器上的问题都交到宝塔上了,但是遇到了一个问题。本站是以www.onesrc.cn为主域名的,onesrc.cn 做成了301跳转。能实现onesrc.cn/xxx 到www.onesrc.cn的跳转,却无法跳转到www.onesrc.cn/xxx,百度后发现有在宝塔中这样设置301跳转的:

1563544881293.png

设置之后,发现没毛用,$request_uri可以被nginx识别,但是不能被apache识别。木得办法了,干脆一不做二不休,弃用宝塔的301,自己手动写重定向规则。顺带着弃用了宝塔自带的强制https跳转,把这个也整合到apache的重定向里面

打开url重定向支持

  1. 找到 /www/server/apache/conf/httpd.conf文件,在第152行左右找到
#LoadModule rewrite_module modules/mod_rewrite.so

去掉代表注释的#号

  1. 找到 < Directory >段,修改为 AllowOverride All
<Directory />
    AllowOverride All
    Require all granted
</Directory>
  1. 重启apache服务

设置重定向规则

在网站根目录下放一个.htaccess文件,内容如下

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^onesrc.cn$ [NC]
RewriteRule ^(.*)$ https://www.onesrc.cn/$1 [R=301,L]
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://www.onesrc.cn/$1 [R=301,L]
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

共有四条RewriteRule重定向规则

  1. 将onesrc.cn的请求301重定向到 https://www.onesrc.cn 实现整站的301跳转
  2. 将http请求(80端口) 重定向到 https://www.onesrc.cn 实现http至 https 跳转
  3. 限制访问,不允许直接访问index.php文件
  4. 当请求不存在的资源时, 统一重定向到index.php,由其(typecho)做出进一步处理

参考:

Apache Rewrite详细配置与使用说明

apache如何设置http自动跳转到https

如何将apache 变量request_uri作为参数传到页面

Responses