PHP学习笔记,nginx的location配置详解

此地以阿帕奇为服务器软件,间接上案例:

此处以阿帕奇为服务器软件,直接上案例:

语法规则: location [=|~|~*|^~] /uri/ { … }

301重定向代码与艺术

1.把index.html重定向到index.php

1.把index.html重定向到index.php

= 起始表示精确匹配

PHP下的301重定向

RewriteEngine On

Options -Indexes

ReWriteRule ^index.html$  /index.php  [NC]
RewriteEngine On

Options -Indexes

ReWriteRule ^index.html$  /index.php  [NC]

^~ 开始表示uri以某个常规字符串初阶,驾驭为匹配
url路径即可。nginx不对url做编码,由此请求为/static/20%/aa,可以被平整^~
/static/ /aa匹配到(注意是空格)。

  

成效:访问www.test.com/index.html效果万分www.test.com/index.php

意义:访问www.test.com/index.html效果分外www.test.com/index.php

~ 发轫表示区分轻重缓急写的正则匹配

  Header( “HTTP/1.1 301 Moved Permanently” ) ;

 

 

~*  开头表示不区分轻重缓急写的正则匹配

  Header( “Location: ” );

2.把index重定向到index.php

2.把index重定向到index.php

!~和!~*分别为差别轻重缓急写不匹配及不区分轻重缓急写不匹配 的正则

  ?

RewriteEngine On

Options -Indexes

ReWriteRule ^index$  /index.php  [NC]
RewriteEngine On

Options -Indexes

ReWriteRule ^index$  /index.php  [NC]

/ 通用匹配,任何请求都会同盟到。

  ASP下的301重定向

成效:访问www.test.com/index效果相当于www.test.com/index.php

意义:访问www.test.com/index效果卓殊www.test.com/index.php

七个location配置的图景下匹配顺序为(参考资料而来,还未实际验证,试试就知道了,不必拘泥,仅供参考):

  <%@ Language=VBScript %>

 

 

率先匹配 =,其次匹配^~, 其次是按文件中逐一的正则匹配,最后是交给 /
通用匹配。当有协作成功时候,为止匹配,按时下分外规则处理请求。

  <%

3.根目录下的PHP文件,用html后缀也能访问

3.根目录下的PHP文件,用html后缀也能访问

 

  Response.Status=”301 Moved Permanently”

写法1:

写法1:

事例,有如下匹配规则:

  Response.AddHeader “Location”,””

RewriteEngine On
Options -Indexes

ReWriteRule ^([a-zA-Z0-9_]{1,})\.html$  /$1.php  [NC]
RewriteEngine On
Options -Indexes

ReWriteRule ^([a-zA-Z0-9_]{1,})\.html$  /$1.php  [NC]

 

  %>

作用:  
访问www.test.com/index.html效果相当于www.test.com/index.php

功效:  
访问www.test.com/index.html效果卓殊www.test.com/index.php

 

  ASP .NET下的301重定向

    访问www.test.com/abc.html效果相当www.test.com/abc.php

    访问www.test.com/abc.html效果非凡www.test.com/abc.php

[plain] view
plain copy

  ColdFusion下的301重定向

 4.根目录下的php文件,直接访问文件名效果一样

 4.根索引下的php文件,直接访问文件名效果一样

 

  <.cfheader statuscode=”301″ statustext=”Moved permanently”>

RewriteEngine On
Options -Indexes

ReWriteRule ^([a-zA-Z0-9_]{1,})$  /$1.php  [NC]
RewriteEngine On
Options -Indexes

ReWriteRule ^([a-zA-Z0-9_]{1,})$  /$1.php  [NC]
  1. location = / {  
  2.    #规则A  
  3. }  
  4. location = /login {  
  5.    #规则B  
  6. }  
  7. location ^~ /static/ {  
  8.    #规则C  
  9. }  
  10. location ~ \.(gif|jpg|png|js|css)$ {  
  11.    #规则D  
  12. }  
  13. location ~* \.png$ {  
  14.    #规则E  
  15. }  
  16. location !~ \.xhtml$ {  
  17.    #规则F  
  18. }  
  19. location !~* \.xhtml$ {  
  20.    #规则G  
  21. }  
  22. location / {  
  23.    #规则H  
  24. }  

  <.cfheader name=”Location” value=”;

功能:  
访问www.test.com/index效果约等于www.test.com/index.php

功用:  
访问www.test.com/index效果相当于www.test.com/index.php

 

  旧域名重定向到新域名

    访问www.test.com/abc效果相当于www.test.com/abc.php

    访问www.test.com/abc效果相当于www.test.com/abc.php

 

  创设一个.htaccess文本,并将上边提供的代码写入文件内,它可以确保旧域名持有的目录或者网页正确的跳转到新域名内。

 

 

 

  记住.htaccess文件一定要放在旧网站的根目录下,并且新网站要和旧网站保持同等的目录结构及网页文件

5.访问文件名+html效果等效后缀为php的公文

5.走访文件名+html效果等效后缀为php的文书

那就是说发生的功力如下:

  Options +FollowSymLinks

 

PHP学习笔记,nginx的location配置详解。 

做客根目录/, 比如 将协作规则A

  RewriteEngine on

RewriteEngine On
Options -Indexes

RewriteRule ^/?([a-z/]+)\.html$ $1.php [NC]
RewriteEngine On
Options -Indexes

RewriteRule ^/?([a-z/]+)\.html$ $1.php [NC]

访问 将匹配规则B,
则相当规则H

  RewriteRule (.*) [R=301,L]

 

 

访问 将匹配规则C

  请将上边的www.111cn.net修改成你想要跳转到的域名。

效果:  

效果:  

访问 ,
将协作规则D和规则E,可是规则D顺序优先,规则E不起成效,而
则优先匹配到 规则C

  其余,我提出我们归总旧网站的外部链接,并联系相应的站点修改导入链链的URL,以指向新站点。

    访问www.test.com/index.html效果极度www.test.com/index.php

    访问www.test.com/index.html效果至极www.test.com/index.php

访问 则匹配规则E,
而不会同盟规则D,因为规则E不区分轻重缓急写。

4.采用“mod_rewrite”技术

    访问www.test.com/abc/abc.html效果相当www.test.com/abc/abc.php

    访问www.test.com/abc/abc.html效果相当于www.test.com/abc/abc.php

访问
不会匹配规则F和规则G,

  通过该技能进行的改动将在.htaccess文件中突显出来,形如:

 6.访问具有目录下的公文等效于访问文件名+后缀

 6.访问具有目录下的文本等效于访问文件名+后缀

访问
则最终匹配到规则H,因为以上规则都不合作,这几个时候应该是nginx转载呼吁给后端应用服务器,比如法斯特CGI(php),tomcat(jsp),nginx作为方向代理服务器存在。

  Options +FollowSymLinks

RewriteEngine On
Options -Indexes

RewriteRule ^/?([a-z/]+)$ $1.php [NC]
RewriteEngine On
Options -Indexes

RewriteRule ^/?([a-z/]+)$ $1.php [NC]

所以实际上行使中,平日最少有多个卓殊规则定义,如下:

  RewriteEngine on

效果:  

效果:  

 

  RewriteCond % ^cfan365.cn

    访问www.test.com/index效果极度www.test.com/index.php

    访问www.test.com/index效果约等于www.test.com/index.php

 

  RewriteRule ^(.*)$ [R=permanent,L]

    访问www.test.com/abc/abc效果相当于www.test.com/abc/abc.php

    访问www.test.com/abc/abc效果相当于www.test.com/abc/abc.php

[plain] view
plain copy

  5.绑定/本地DNS(域名别名跳转)

7.404页面跳转设置

7.404页面跳转设置

 

  即使拥有对地面DNS记录进行编制修改的权杖,则只要加上一个记录就可以化解此难点。

  目标:当用户访问我们不设有的页面时候,把网站内容跳转到404页面。在此地,我把404.html当做404页面,放在网站的根目录。

  目的:当用户访问大家不设有的页面时候,把网站内容跳转到404页面。在此地,我把404.html看作404页面,放在网站的根目录。

  1. #直接匹配网站根,通过域名访问网站首页相比频仍,使用那一个会加紧处理,官网如是说。  
  2. #这边是一贯转发给后端应用服务器了,也足以是一个静态首页  
  3. # 第四个必选规则  
  4. location = / {  
  5.     proxy_pass   
  6. }  
  7.    
  8. # 第三个必选规则是拍卖静态文件请求,那是nginx作为http服务器的刚强  
  9. # 有二种配备格局,目录匹配或后缀匹配,任选其一或搭配使用  
  10. location ^~ /static/ {  
  11.     root /webroot/static/;  
  12. }  
  13. location ~* \.(gif|jpg|jpeg|png|css|js|ico)$ {  
  14.     root /webroot/res/;  
  15. }  
  16.    
  17. #其几个规则就是通用规则,用来转载动态请求到后端应用服务器  
  18. #非静态文件请求就默许是动态请求,自己按照实际把握  
  19. #究竟如今的有些框架的盛行,带.php,.jsp后缀的情景很少了  
  20. location / {  
  21.     proxy_pass   
  22. }  

  若无此权限,则可需要网站托管服务商对DNS服务器进行相应设置。

 

 

 

  DNS服务器的装置

RewriteEngine On
Options -Indexes
ErrorDocument 404 /404.html
RewriteEngine On
Options -Indexes
ErrorDocument 404 /404.html

 

  若要将aaa.cfan365.cn指向www.111cn.net,则只需在DNS服务中应增添一个别名记录,可写成:aaa
IN CNAME www.111cn.net。

 

 

以下部分直接copy过来的,有点乱,可以视作参考

  如需陈设多量的杜撰域名,则可写成:* IN CNAME www.111cn.net.

  效果:

  效果:

 

  那样就可将富有未安装的以cfan365.cn结尾的笔录整个重定向到www.111cn.net上。

澳门葡京备用网址 1

澳门葡京备用网址 2

三、ReWrite语法
last – 基本上都用那个Flag。
break – 中止Rewirte,不在继续同盟
redirect – 重返临时重定向的HTTP状态302
permanent – 重临永久重定向的HTTP状态301

  6.用ASP/PHP实现301重定向:

  各位在创设404页面能够一直百度上找些模版,再修改,页面会越加精粹,提议在404页面设置3分钟跳转首页、伸张设置再次来到首页链接,那样对寻找引擎和用户尤其友好。

  各位在创立404页面可以一向百度上找些模版,再修改,页面会越发赏心悦目,提出在404页面设置3分钟跳转首页、扩张设置重回首页链接,这样对寻找引擎和用户越发友好。

注:last和break最大的不一样在于

  代码在上头已经介绍过了

 

 

– break是甘休当前location的rewrite检测,而且不再举行location匹配 –
last是终止当前location的rewrite检测,但会连续重试location匹配并拍卖区块中的rewrite规则
1、上面是足以用来判定的表明式:
-f和!-f用来判定是不是留存文件
-d和!-d用来判定是或不是留存目录
-e和!-e用来判定是或不是留存文件或目录
-x和!-x用来判定文件是或不是可实施
2、上边是足以看成判断的全局变量
$args #其一变量等于请求行中的参数。

  资深SEO专家Dan Thies的见地和提议

$content_length #请求头中的Content-length字段。

  对于Business.com所受到的标题Dan
Thies深有体会,因为他也有过类似的面临。他的网站上有一个会员跟踪脚本,其中一个会员的站点通过302限令映射到那么些跟踪脚本,而这几个跟踪脚本又是透过302映射到他的主页。当在谷歌中用“keyword
research”进行搜索,他的主页排行在前十位,但是地址突显的却是那么些会员的网址。结果使她哭笑不得:访问者通过谷歌(Google)搜索结果进入她的网站,而他却只得为这几个访问量给那个会员支付薪酬!
后来她用robots.txt文件禁止Spiders跟踪访问他的会员跟踪脚本才算解决了难点。

$content_type #请求头中的Content-Type字段。

  对于Business.com,Dan
Thies认为:“近日谷歌在302重定向”的处理上还留存必然的标题,但并不意味谷歌差别意302重定向。Business.com并未遭封或受到惩罚,它们只是再次回到了错误的响应。”

$document_root #如今哀求在root指令中指定的值。

  Dan
Thies提出:假使利用了跟踪URL/脚本,又不可以不让访问者重定向到某一着陆页,那么肯定要在robots.txt文件中禁止Spiders去访问第一个重定向。假若没有对跟踪URL/脚本进行重定向,而只是把其余一个URL上的情节给复制过来,那么应在robots.txt文件中明令禁止Spiders去访问跟踪URL,以免因内容重复而遭招来引擎惩罚。

$host #请求主机头字段,否则为服务器名称。

  301重定向经验谈

$http_user_agent #客户端agent信息

  一个多域名站主的经验之谈:

$http_cookie #客户端cookie信息

  “我唯有一个网站,主域名是www.111cn.net,别的还有诸如domain1.com、domain2.com、domain3.com等总结十多少个域名。所有这一个次级域名都映射到www.111cn.net,而且所有域名对应的是同一个IP地址。由于实在我唯有一个站点,一个站点又不得不对应一个.htaccess文本,鲜明不容许直接修改.htaccess文件来落到实处重定向。我动用了如下步骤:

$limit_rate #本条变量可以限制连接速率。

  A.把domain1.com从cfan365.cn上独立出来,让它成为服务器上的一个一般独立网站。

$request_body_file #客户端请求主体新闻的临时文件名。

  B.为domain1.com创制一个.htaccess文本文件,并在文件中装置重定向代码为:

$request_method #客户端请求的动作,平日为GET或POST。

  Redirect permanent /

$remote_addr #客户端的IP地址。

  再将修改后的.htaccess文件上传给domain1.com四方服务器。

$remote_port #客户端的端口。

  这一步也可以在域名控制面板中成就。

$remote_user #业已由此Auth Basic Module验证的用户名。

一流域名www.111cn.net下的目录abc
原访问地址为:www.111cn.net/abc
前天想为目录abc添加二级域名abc.111cn.net
怎么才能将www.111cn.net/abc永久重定向abc.111cn.net
服务器环境:win2003+IIS6+php

$request_filename
#当前哀求的文本路径,由root或alias指令与URI请求生成。

www.xxx.net/abc已不复是一个域名了,浏览器访问至始至终都是对一个页面的请求,重定向只好由www.xxx.net上边abc文件来控制的。

$query_string #与$args相同。

还有个难点,就是301世代定向后,
动态页的GET参数怎么传呀
将abc/index.php 永久定向到abc.xxx.com/index.php
设若在地方栏中输入
abc/index.php?xxx=123
页面会直接转到
abc.xxx.com/index.php
但是GET参数 xxx=123 没有了。
是或不是,须求在动态文件中底部加代码:
率先判断客户端的URL,若是否abc.xxx.com/index.php
就输出
Header( “HTTP/1.1 301 Moved Permanently” );
Header( “Location: abc.xxx.com/index.php?GET参数及值” );

$scheme #HTTP方法(如http,https)。

PHP下的贯彻格局(参考):

$server_protocol #恳请使用的商谈,平常是HTTP/1.0或HTTP/1.1。

.htaccess文件代码如下(bloghuman.com的.htaccess如此设置):

$server_addr #服务器地址,在形成一回系统调用后可以确定这么些值。

澳门葡京备用网址,Options +FollowSymlinks

$server_name #服务器名称。

RewriteEngine on

$server_port #伸手到达服务器的端口号。

rewritecond %{http_host} ^bloghuman.com [nc]

$request_uri
#富含呼吁参数的原始URI,不含有主机名,如:”/foo/bar.php?arg=baz”。

rewriterule ^(.*)$ ]

$uri #不带请求参数的眼前URI,$uri不含有主机名,如”/foo/bar.html”。

诠释1:如若用户访问

$document_uri #与$uri相同。

注释2:测试URL:

例:
$host:localhost
$server_port:88
$request_uri:
$document_uri:/test1/test2/test.php
$document_root:D:\nginx/html
$request_filename:D:\nginx/html/test1/test2/test.php
四、Redirect语法
多目录转成参数
abc.domian.com/sort/2 =>
abc.domian.com/index.php?act=sort&name=abc&id=2

自身在wlxs.com.cn下安排了.htaccess文件,使其301跳转至

1.     if ($host ~* (.*)\.domain\.com) {

本人的.htaccess配置达成了由主域名(bloghuman.com)301跳转至二级域名(www.bloghuman.com);

2.     set $sub_name $1;   

结论:

3.     rewrite ^/sort\/(\d+)\/?$
/index.php?act=sort&cid=$sub_name&id=$1 last;

Options +FollowSymlinks

4.     }

RewriteEngine on

目录对换
/123456/xxxx -> /xxxx?id=123456

rewritecond %{http_host} ^111cn.net [nc]

1.     rewrite ^/(\d+)/(.+)/ /$2?id=$1 last;

rewriterule ^(.*)$ ]

诸如上面设定nginx在用户使用ie的使用重定向到/nginx-ie目录下:

ASP脚本完结301跳转的方法:

1.     if ($http_user_agent ~ MSIE) {

<%

2.     rewrite ^(.*)$ /nginx-ie/$1 break;

if request.ServerVariables(“HTTP_HOST”)=”domain1.com” or
request.ServerVariables(“HTTP_HOST”)=”111cn.net” then

3.     }

if Request.ServerVariables(“QUERY_STRING”)<>”” then p=”?”

目录自动加“/”

Response.Status=”301 Moved Permanently”

1.     if (-d $request_filename){

Response.AddHeader
“Location”,””)

2.     rewrite ^/(.*)([^/])$ permanent;

Response.End

3.     }

end if

禁止htaccess

1.     location ~/\.ht {

2.              deny all;

3.          }

禁止三个目录

1.     location ~ ^/(cron|templates)/ {

2.              deny all;

3.     break;

4.          }

取缔以/data开头的文件
能够禁止/data/下多级目录下.log.txt等请求;

1.     location ~ ^/data {

2.              deny all;

3.          }

取缔单个目录
无法禁止.log.txt能请求

1.     location /searchword/cron/ {

2.              deny all;

3.          }

明令禁止单个文件

1.     location ~ /data/sql/data.sql {

2.              deny all;

3.          }

给favicon.ico和robots.txt设置过期时间;
此间为favicon.ico为99 天,robots.txt为7天并不记录404错误日志

1.     location ~(favicon.ico) {

2.                      log_not_found off;

3.     expires 99d;

4.     break;

5.          }

6.      

7.          location ~(robots.txt) {

8.                      log_not_found off;

9.     expires 7d;

10. break;

11.      }

设定某个文件的晚点时间;那里为600秒,并不记录走访日志

1.     location ^~ /html/scripts/loadhead_1.js {

2.                      access_log   off;

3.                      root /opt/lampp/htdocs/web;

4.     expires 600;

5.     break;

6.            }

文本反盗链并安装过期时间
此地的return 412
为自定义的http状态码,默许为403,方便找出不错的盗链的伸手
“rewrite ^/
“access_log off;”不记录走访日志,减轻压力
“expires 3d”所有文件3天的浏览器缓存

1.     location ~* ^.+\.(jpg|jpeg|gif|png|swf|rar|zip|css|js)$ {

2.     valid_referers none blocked *.c1gstudio.com *.c1gstudio.net
localhost 208.97.167.194;

3.     if ($invalid_referer) {

4.         rewrite ^/ ;

5.         return 412;

6.         break;

7.     }

8.                      access_log   off;

9.                      root /opt/lampp/htdocs/web;

10. expires 3d;

11. break;

12.      }

只充许固定ip访问网站,并累加密码

1.     root  /opt/htdocs/www;

2.     allow   208.97.167.194;

3.     allow   222.33.1.2;

4.     allow   231.152.49.4;

5.     deny    all;

6.     auth_basic “C1G_ADMIN”;

7.     auth_basic_user_file htpasswd;

将一种类目录下的文件转成一个文本,增强seo效果
/job-123-456-789.html 指向/job/123/456/789.html

1.     rewrite ^/job-([0-9]+)-([0-9]+)-([0-9]+)\.html$
/job/$1/$2/jobshow_$3.html last;

将根目录下某个文件夹指向2级目录
如/shanghaijob/ 指向 /area/shanghai/
要是您将last改成permanent,那么浏览器地址栏显是 /location/shanghai/

1.     rewrite ^/([0-9a-z]+)job/(.*)$ /area/$1/$2 last;

地点例子有个难点是访问/shanghai 时将不会协作

1.     rewrite ^/([0-9a-z]+)job$ /area/$1/ last;

2.     rewrite ^/([0-9a-z]+)job/(.*)$ /area/$1/$2 last;

那样/shanghai 也得以访问了,但页面中的相对链接无法使用,
如./list_1.html真正地址是/area
/shanghia/list_1.html会变成/list_1.html,导至不可能访问。

那自己加上机关跳转也是相当咯
(-d
$request_filename)它有个标准是不可或缺为真实目录,而我的rewrite不是的,所以并未效能

1.     if (-d $request_filename){

2.     rewrite ^/(.*)([^/])$ permanent;

3.     }

知情原因后就好办了,让自己手动跳转吧

1.     rewrite ^/([0-9a-z]+)job$ /$1job/ permanent;

2.     rewrite ^/([0-9a-z]+)job/(.*)$ /area/$1/$2 last;

文件和目录不设有的时候重定向:

1.     if (!-e $request_filename) {

2.     proxy_pass ;

3.     }

域名跳转

1.     server

2.          {

3.                  listen       80;

4.                  server_name  jump.c1gstudio.com;

5.                  index index.html index.htm index.php;

6.                  root  /opt/lampp/htdocs/www;

7.                  rewrite ^/ ;

8.                  access_log  off;

9.          }

多域名转向

1.     server_name  www.c1gstudio.com www.c1gstudio.net;

2.                  index index.html index.htm index.php;

3.                  root  /opt/lampp/htdocs;

4.     if ($host ~ “c1gstudio\.net”) {

5.     rewrite ^(.*) permanent;

6.     }

三级域名跳转

1.     if ($http_host ~* “^(.*)\.i\.c1gstudio\.com$”) {

2.     rewrite ^(.*) ;

3.     break;

4.     }

域名镜向

1.     server

2.          {

3.                  listen       80;

4.                  server_name  mirror.c1gstudio.com;

5.                  index index.html index.htm index.php;

6.                  root  /opt/lampp/htdocs/www;

7.                  rewrite ^/(.*) last;

8.                  access_log  off;

9.          }

 

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

*
*
Website