一、Nginx重写规则
说明:
设置:设置变量
If:用于判断重写语句中一些不能直接匹配的条件,比如检测文件、http头、cookie等是否存在。
用法:if(condition){…}
-当if表达式中的条件为真时,执行if块中的语句。
-当表达式只是一个变量时,如果值为空或任何以0开头的字符串都将被视为false。
-直接比较内容时,用=和!=
-当使用正则表达式匹配时,使用
~区分大小写的匹配
~*不区分大小写的匹配
!~区分大小写不匹配
!~*不区分大小写的不匹配
-使用-f、-d、-e、-x来检测文件和目录
-f检测文件的存在。
-d检测目录的存在。
-e检测文件、目录或符号链接存在。
-x测试文件可执行文件
类似~,前面!那么就是“不” *** 作。
Return:用于直接设置HTTP返回状态,如403、404等。
中断:立即停止重写检测
重写:
Break–停止重写检测,当执行带有break标志的重写语句时,该语句是重写的最终结果。
Last-Stop重写检测,但与break不同,last语句不一定是最终结果。
redirect–返回302临时重定向,通常用于重定向到完整的URL(包括http:part)
permanent–返回301永久重定向,通常用于重定向到完整的URL(包括http:part)
了解一些基本定义,然后直接配置。
二。nginx配置示例
server { listen 80; server_name www.soul.com soul.com pay.soul.com; root /www; #charset koi8-r; #access_log logs/host.access.log main; location / { index index.php index.html index.htm; } #error_page 404 /404.html; # redirect server error pages to the static page /50x.html # error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } ########### 二级域名自动转到子目录下 ####################### set $sub_domain ""; if ($http_host~ "(.+).soul.com$") { set $sub_domain $1; } if ($http_host = "www.soul.com") { set $sub_domain ""; } if ($sub_domain != "") { rewrite /(.+) /$sub_domain/$1 break; } ########################################################### # proxy the PHP scripts to Apache listening on 127.0.0.1:80 # #location ~ \.php$ { # proxy_pass http://127.0.0.1; #} # deny access to .htaccess files, if Apache's document root # concurs with nginx's one # #location ~ /\.ht { # deny all; #} }以上注释之间的配置是自动将二级域名匹配到根目录下域名对对应的子目录中。
第三,打开支持路径_信息
1.配置文件示例
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 # location ~ \.php { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name; include fastcgi_params; ############################################################### set $path_info ""; set $real_script_name $fastcgi_script_name; if ($fastcgi_script_name ~ "^(.+?\.php)(/.+)$") { set $real_script_name $1; set $path_info $2; } fastcgi_param SCRIPT_FILENAME $document_root$real_script_name; fastcgi_param SCRIPT_NAME $real_script_name; fastcgi_param PATH_INFO $path_info; ############################################################## }只需在location中的上述注释之间添加代码。代码的含义也很容易理解。是一个变量,主要设置path_info。注意~\。php没有$,否则不会匹配以下参数。
配置完成后,我们来测试一下,看看效果:
在根目录下创建一个新的index.php文件:
[root@www]# cat index.php <?php echo "<pre>"; print_r($_GET); print_r($_SERVER); exit; require_once('config/common.php'); Route::run(); ?>访问测试结果:
可以看到参数正常传递。这种格式不会报错。
四。限制nginx对IP和未绑定域名的访问
在测试的正常配置下,将www.baidu.com绑定到测试仪的IP上,测试访问页面:
所有测试都可以访问我们的默认页面。这肯定是不安全的,不应该这么做。这里有一个限制。它只能通过我们的域名访问:
配置代码:
# 很简单的一段代码:在虚拟主机或者默认配置的server段最开始处添加如下一段server配置: server { listen 80 default; server_name _; return 403; }重读配置文件的测试结果如下:
可见目前所有的访问都是被禁止的。直到该配置完成。更还可以关闭显示版本号等。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)