文章封面:
王者荣耀元歌 —— 是我?不是我!是傀儡!
1.相关知识点
nginx重定向规则(apache 的简介);
nginx两种跳转:显式跳转,隐式跳转;
伪静态;
同源策略;
2.我的重定向主要应用
1:zouzhenzhong.com定向到https://www.zouzhenzhong.com,给网站加小绿锁;便于百度的收录,权重集中到一个域名;
2:tec.zouzhenzhong.com隐式到https://www.zouzhenzhong.com/article/listshow?menu_id=101,看上去我有个专业的技术博客。
3.源码
一个字就是干!下面贴出nginx 配置zouzhenzhong.com和 tec.zouzhenzhong.com的源文件。(个人网站被攻击也没啥损失,自己印象云,git都有备份,还请大哥高抬贵手!)
zouzhenzhong.conf
#主站
server {
#这里是ssl 对应配置,从对应的云服务器copy demo对应填写即可
listen 443 ssl;
server_name www.zouzhenzhong.com ;
ssl on;
ssl_certificate /etc/ssl/tencent/www.zouzhenzhong.com/1_www.zouzhenzhong.com_bundle.crt;
ssl_certificate_key /etc/ssl/tencent/www.zouzhenzhong.com/2_www.zouzhenzhong.com.key;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #按照这个协议配置
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;#按照这个套件配置
ssl_prefer_server_ciphers on;
#www.zouzhenzhong.com 站点的数据能够让其他任何网站拉取,展示;担心安全问题可以使用jsonp,数据源带token的形式。
add_header Access-Control-Allow-Origin *;
#url 隐式跳转:https://www.zouzhenzhong.com/121.html 显示的是https://www.zouzhenzhong.com/article/detail/121的内容, 但是url 显示的是https://www.zouzhenzhong.com/121.html
#注意关键词proxy_pass
location ~* \.html$ {
rewrite ^/([\d]+)\.html$ /article/detail/$1 break;
proxy_pass https://www.zouzhenzhong.com;
}
location / {
root /home/yiiblog/frontend/web;
index index.html index.php;
if (!-e $request_filename){
rewrite ^/(.*) /index.php last;
}
}
#没有下面 cgi(Common Gateway Interface)将无法解析php
location ~ .php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
root /home/yiiblog/frontend/web;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
#对应资源,不区分大小写,301强跳,便于cdn
location ~* \.(png|jpg|jpeg||gif|js|css|woff2|eot|ttf|woff|svg|otf)$ {
rewrite ^/(.*)$ https://staticblog.zouzhenzhong.com/$1 permanent;
}
}
server {
#注意https 监听的一定是443端口;所以 zouzhenzhong.com 监听了 80端口和443两个端口;
listen 80 default_server;
server_name zouzhenzhong.com;
#重定向到www
rewrite ^/(.*)$ https://www.zouzhenzhong.com/$1 permanent;
}
tec_zouzhenzhong.conf
server {
listen 443 ;
server_name tec.zouzhenzhong.com;
ssl on;
ssl_certificate /etc/letsencrypt/live/zouzhenzhong.com/tec_zouzhenzhong/1_tec.zouzhenzhong.com_bundle.crt;
ssl_certificate_key /etc/letsencrypt/live/zouzhenzhong.com/tec_zouzhenzhong/2_tec.zouzhenzhong.com.key;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #按照这个协议配置
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;#按照这个套件配置
ssl_prefer_server_ciphers on;
#tec.zouzhenzhong.com 所有的访问 都会隐式重定向到https://www.zouzhenzhong.com代理的/article/listshow?menu_id=101
location / {
rewrite ^/(.*)$ /article/listshow?menu_id=101 break;
proxy_pass https://www.zouzhenzhong.com;
}
#location ~ .php$ 没有做cgi的配置,tec.zouzhenzhong.com 并不需要解析php
}
server {
listen 80;#这个不能省略啊
server_name tec.zouzhenzhong.com;
rewrite ^(.*)$ https://${server_name}$1 permanent;
}
4.知识点解析
nginx重定向规则
^/([\d]+)\.html$/article/detail/$1
^/ 就理解为开始就好(还有很多形式,就这样用就行)。
使用括号 () 通过正则匹配标记要截取的内容 ,对应成变量$1,$2...
location匹配location / 通用匹配,任何未匹配到其它location的请求都会匹配到,相当于switch中的default。
nginx两种跳转
显式跳转:访问的url跳转
location ~* \.(png|jpg|jpeg||gif|js|css|woff2|eot|ttf|woff|svg|otf)$ {
rewrite ^/(.*)$ https://staticblog.zouzhenzhong.com/$1 permanent;
}
隐式跳转:访问的url 不跳,但是内容已经跳了。
注意关键词:proxy_pass ;(吐槽下,网上黏贴复制的文章错的一塌糊涂都还各种转载....)
location ~* \.html$ {
rewrite ^/([\d]+)\.html$ /article/detail/$1 break;
proxy_pass https://www.zouzhenzhong.com;
}
注意: service nginx restart 前进行 nginx -t 检查;配置文件记得备份;
伪静态
伪静态:优点:便于seo ; 缺点:会增加一点CPU开销(多一次跳转); 优点的作用 > 缺点。
同源策略
对应的service name 对那些host开放;比如:www.zouzhenzhong.comAccess-Control-Allow-Origin * ,www.zouzhenzhong.com可以给其他网站加载,嵌套渲染等;
5.其他
apache 重定向
kimma.conf : www.viyoya.com中 静态文件跳kimma.viyoya.com
<VirtualHost *:80>
ServerAdmin kimma.viyoya.com
DocumentRoot /var/www/html
Header set Access-Control-Allow-Origin “*”
<ifModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTP_HOST} www.viyoya.com.*$ [NC]
RewriteRule "^/(.*)\.(png|jpg|ttf|woff|woff2|jpeg|GIF|gif|js|css|woff2|eot|ttf|woff|svg|otf|txt)$" "http://kimma.viyoya.com/$1.$2" [L,R=301]
</ifModule>
</VirtualHost>
apache .htaccessviyoya.com跳www.viyoya.com
RewriteEngine On
RewriteCond %{HTTP_HOST} ^viyoya.com [NC]
RewriteRule ^/(.)*$ http://www.viyoya.com/$1 [L,R=301]
Header set Cache-Control "max-age=2592000"
注意:重启apche: apachectl restart 前检查 apche: apachectl -t
文章来源 : 邹振忠的博客 - 重定向漫谈