nginx和apache下的url rewrite

转载 2017年01月10日 20:00:41

url rewrite是服务器的一个模块,功能包括,配置一些访问的网址的重写,其中的语句规则是基于正则表达式.

其中涉及到的变量都是基于服务器上(apache或者nginx)通用的变量,具体一些变量详细解释以及nginx下rewrite的一些配置实例请参考ngnix的rewrite参数,用法。

比如为了使网址更加友好,可以将用户看到的网址www.simple.com/ming-tian-shi-ge-hao-tian-qi.html重定位到www.simple.com/ming/tian/shi/ge/hao/tian/qi.html,这样用户看到的就是一个网址而不是一个个的文件夹。

其他还有很多有用的功能,比如,防止别的网站引用你网站的图片,如果别人使用的是你网站的图片的话,那么占用的是你的网站的流量,但是却不能给你带来访问量

还比如可以自己写一个友好的404页面,如果发生404错误的时候就将页面定位到自己写的404页面。

还可以将css文件还有js文件设置保存在用户浏览器上面的时间,加快网页的加载速度。

下面是nginx上面的rewrite配置文件


 1 server {
 2         listen  80;
 3         server_name www.simple.com ;
 4         root /home/www/simple;
 5         index index.php index.html index.htm;
 6         charset utf-8;
 7         access_log logs/simple.access.log main;
 8         #如果请求主机字段不等于'www.simple.com'则重定向到http://www.simple.com/*
 9         if ( $host != 'www.simple.com' ) {
10                 rewrite ^/(.*)$ http://www.simple.com/$1 permanent;
11         }
12         #如果当前请求的文件路径不存在,将出现/tool/的网址重定向到/tool/index.php,将出现kisswall/的网址重定向到/kisswall/index.php
13         if ( !-e $request_filename ) { 
14                 rewrite ^(.*)tool/(.*)$ $1tool/index.php last;
15                 rewrite ^(.*)kisswall/(.*)$ $1kisswall/index.php last;
16         }
17         location / {
18                 directio 1;
19                 output_buffers 1 128k;
20                 index index.php index.html index.htm ;
21                 rewrite ^(.*?)-(.*)$ $1.php?$2;
22         }
23         #指定404错误页面
24         error_page 404 /404.html;
25                 location = /50x.html {
26         }
27         #设置js、css过期时间
28         location ~ \.(css|js)$ {
29                 expires 1w;
30         }
31         #防盗链
32         location ~ \.(jpg|jpeg|png|gif|swf|ico)$ {
33                 valid_referers none bloacked *.erqilu.com *.renren.com *.weibo.com;
34                 if ( $invalid_referer ) {
35                         return 404;
36                 }
37                 expires max;
38         }    
39         location ~ \.php$ {
40             fastcgi_pass   127.0.0.1:9000;
41             fastcgi_index  index.php;
42             fastcgi_param  SCRIPT_FILENAME  /$document_root$fastcgi_script_name;
43             include        fastcgi_params;        
44         }    
45         #禁止htaccess
46         location ~ /\.ht { 
47                 deny all;
48         }
49         #将出现/min/的网址定位到/min/index.php?*
50         location /min/{ 
51                 rewrite /min/([a-z]=.*)  /min/index.php?$1 last;
52                 #expires 1w;
53         }
54 }   
apache对应的.htaccess文件

如果访问的网址不是“localhost”或者“127.0.0.1”则跳转到http://localhost/
 
RewriteEngine On
RewriteCond %{HTTP_HOST} !^localhost [NC]
RewriteCond %{HTTP_HOST} !^127.0.0.1 [NC]
RewriteCond %{HTTP_HOST} !^$
RewriteRule ^(.*) http://localhost/$1 [L]
<br>
RewriteEngine on
RewriteCond %{ENV:REDIRECT_STATUS} 200
RewriteRule ^.*$ - [L]<br><br>#如果访问的网址文件不存在,则如果网址中出现/tool/则将网址重写为$1tool/index.php 网址中若出现/kisswall/同理
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)tool/(.*)$ $1tool/index.php [L]
RewriteRule ^(.*)kisswall/(.*)$ $1kisswall/index.php [L]
<br>
RewriteEngine On
DirectoryIndex index.php index.html index.htm<br>#将以-分割的网址转换为$1.php?$2的格式
RewriteRule ^(.*)-htm-(.*)$ $1.php?$2
RewriteCond %{HTTP_HOST} !^localhost [NC]
RewriteRule ^(.*)  http://localhost/$1 [L]
#定义404页面
ErrorDocument 404 /404.html
#防盗链
RewriteBase /
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://localhost/.*$ [NC]
RewriteRule .(jpg|jpeg|png|gif|swf|ico)$ - [R=302,L]

对照可参考apache和nginx配置的异同,

其中nginx的url rewrite配置文件存放的位置是:usr/local/nginx/conf


Apache中URL Rewrite技术的实现

最近我们公司的网站在进行优化动作,要想采用一种好点的技术,使得原来的PHP动态形式的网页文件能够被GOOGLE等搜索引擎更加容易地收入其中,目前我们已经采用了一些改进办法:比如在后台用PHP程序将原来...
  • newhappy2008
  • newhappy2008
  • 2007年06月14日 19:14
  • 2522

Apache Rewrite配置

#配置Apache虚拟主机,打开httpd-vhosts.conf;     ServerName www.xxx.com     DocumentRoot "/usr/tomcat/apac...
  • maxracer
  • maxracer
  • 2016年02月25日 17:26
  • 893

Apache URLRewrite 原理及配置实现

看一下网站上的一些 URL。您是否发现一些类似于 http://yoursite.com/info/dispEmployeeInfo. ... 99&type=summary 的 URL?或者,您...
  • txl16211
  • txl16211
  • 2014年10月13日 22:39
  • 2766

(Nginx) URL REWRITE

把URI地址用作参数传递:URL REWRITE 最简单的是基于各种WEB服务器中的URL重写转向(Rewrite)模块的URL转换: 这样几乎可以不修改程序的实现将 news.asp?id=...
  • txl16211
  • txl16211
  • 2014年09月25日 22:45
  • 3807

nginx中location中关于proxy_pass和rewrite的应用

1,问题描述 upstream datacollectbackend{ #ip_hash; server 10.234.1.211:6100 max_fails=5 fai...
  • mchdba
  • mchdba
  • 2015年11月25日 20:53
  • 11100

yii2 urlManager url美化及apache下yii2 rewrite设置

近期在学习yii2框架的使用,在看别人的博客时讲到了美化url的实现 比如,默认进入about页面的时候,url是这样的http://localhost/index.php?r=site%2Fabo...
  • u012879379
  • u012879379
  • 2015年12月24日 15:36
  • 2918

Nginx URL Rewrite – URL 转发规则

Nginx(engine x)是由Igor Sysoev主导设计和实现的高性能的web服务器和邮件代理服务器,目前它已经成为代替在web服务器市场遥遥领先的apache服务器的首选替代品. 随着越...
  • remotesupport
  • remotesupport
  • 2012年03月21日 09:31
  • 6897

关于apache开启rewrite模式后对URL解析测试

apache开启rewrite模式
  • lvqingyao520
  • lvqingyao520
  • 2016年11月23日 09:27
  • 1053

apache主机重写规则与nginx主机重写规则转换

apache主机重写规则与nginx主机重写规则转换
  • w786572258
  • w786572258
  • 2016年09月22日 11:10
  • 2035

rewrite、nginx proxy反向代理和缓存

实验环境 网关  classroom  172.25.8.254 workstation 172.25.8.9 server a-j eth0 172.25.8.10- 外网 eth1 ...
  • lihuaichen
  • lihuaichen
  • 2016年09月10日 13:59
  • 2357
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:nginx和apache下的url rewrite
举报原因:
原因补充:

(最多只允许输入30个字)