域名重定向
什么是域名重定向
域名重定向是通过设置web服务的配置文件,将原本访问A域名的请求访问到B域名。
为什么要做域名重定向?
一个比较简单的例子:之前做了一个网站,域名又长又复杂,现在申请了一个新的域名,又短又容易记住(或者是域名能跟品牌匹配),想把新的域名做成主域名来推广,但是有些用户可能将老的域名收藏了,习惯老的域名访问。这时候就可以做域名重定向,将老的域名重定向到新的域名。这样不管是老用户通过老的域名访问,还是新用户通过新的域名访问,最终跳转到的域名都是新的域名。
域名重定向的方式
301 permanent
- 301代表永久性转移(Permanently Moved),301重定向是网页更改地址后对搜索引擎友好的最好方法,只要不是暂时搬移的情况,都建议使用301来做转址。
302 redirect
- 302代表暂时性转移(Temporarily Moved ),在前些年,不少Black Hat SEO(黑帽SEO)曾广泛应用这项技术作弊,目前,各大主要搜索引擎均加强了打击力度,像Google前些年对域名之王(Business)以及近来对BMW德国网站的惩罚。即使网站客观上不是spam,也很容易被搜寻引擎容易误判为spam而遭到惩罚。
域名重定向实例
- 在虚拟主机配置文件中添加第二个域名
server {
listen 80;
server_name blog.abc.com www.lcblog.com;
像上面这样做(假设两个域名均添加到dnspot中),两个域名是都可以正常访问网站的,但是它们并没有重定向,也就是搜索引擎中给它们的权重不会发生变化,这样对我们新的域名的推广不太友好。
- 将老的域名重定向到新的域名
server {
listen 80;
server_name blog.abc.com www.lcblog.com;
if ( $host = blog.abc.com )
{
rewrite /(.*) http://www.lcblog.com/$1 permanent;
}
在配置文件中添加了if以及后面的这些内容。意思就是当访问blog.abc.com时,将blog.abc.com重定向到www.lcblog.com 后面的内容保持不变,比如blog.abc.com/index.php→www.lcblog.com/index.php; permanent就是定义的301,表示永久重定向。 nginx -t nginx -s reload 验证有无语法错误,重新加载配置文件
- 验证,使用curl命令验证
[root@localhost blog.abc.com]# curl -x127.0.0.1:80 -I blog.abc.com/1.test 使用的是旧域名
HTTP/1.1 301 Moved Permanently
Server: nginx/1.14.2
Date: Sun, 17 Feb 2019 06:30:57 GMT
Content-Type: text/html
Content-Length: 185
Connection: keep-alive
Location: http://www.lcblog.com/1.test 实际访问的是新域名下的内容
补充内容
- 如果涉及域名重定向使用301
- 如果不涉及域名重定向用302:rewrite /1.txt /2.txt redirect;
- 状态码:200(OK) 404(网页不存在) 301(永久重定向) 302(临时重定向)
用户认证
为了站点的安全,可以通过修改配置文件来针对一些重要的目录(站点后台地址)进行用户认证
用户认证实例
- 针对admin.php来做用户认证,在配置文件中添加如下内容
location ~ admin.php
{
auth_basic "Auth";
auth_basic_user_file /etc/nginx/user_passwd;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /data/wwwroot/blog.abc.com$fastcgi_script_name;
include fastcgi_params;
}
- nginx -t nginx -s reload 验证有无语法错误,重新加载配置文件
- 为该站点的admin.php创建用户lisi,需要htpasswd命令,这个命令是由hpptd-tools提供的,所以需要先安装httpd-tools包
[root@localhost blog.abc.com]# yum install httpd-tools -y
[root@localhost blog.abc.com]# htpasswd -c /etc/nginx/user_passwd lisi
New password:
Re-type new password:
Adding password for user lisi
- 上面命令中的-c参数是创建/etc/nginx/user_passwd文件,下一次添加用户就不能使用-c参数了,要不然会把之前的用户的信息都给覆盖掉,入下所示。-m是md5加密。
[root@localhost blog.abc.com]# htpasswd -m /etc/nginx/user_passwd zhangsan
补充
nginx location优先级
location / 优先级比 location ~ 要低,也就是说,如果一个请求(如,aming.php)同时满足两个location
location /amin.php
location ~ *.php$
会选择下面的
nginx location 文档: https://github.com/aminglinux/nginx/tree/master/location