apache RewriteRule

apache RewriteRule最近发现一个新的东西(可能以前一直没有注意)Apache中的rewrite_modul模块。可以将你的url得到的地址直接重新定义成自己想要的位置。 也就是说输入的URL可以重新定义成一个动态的地址。而且这个URL 不会被改写,动态地址是在后台执行然后返回数据。这个功能还可以使用在写程序时自己定义的CACHE,完全提高服务器负担,加快响应时间,这个就看

大家好,又见面了,我是你们的朋友全栈君。

最近发现一个新的东西(可能以前一直没有注意) Apache 中的 rewrite_modul 模块。

可以将你的 url 得到的地址直接重新定义成 自己想要的位置。  也就是说 输入的 URL 可以 重新定义成 一个动态的 地址。 而且这个 URL 不会被改写,动态地址是在后台执行然后返回数据。

这个功能还可以使用在 写程序时自己定义的 CACHE ,完全提高服务器负担,加快响应时间,这个就看你怎么使用了。

取消了APACHE 配置文件 http.conf 里LoadModule rewrite_module modules/mod_rewrite.so前面的注释。目录下需要有一个配置文件 .htaccess

内容如下(例子):

RewriteEngine On
RewriteBase /tt/
RewriteCond %{ ENV:REDIRECT_SURI } !^$
RewriteRule (.*) – [L]
RewriteRule ^[[:alnum:]]+/*$ blog/index.php [E=SURI:1,L]
RewriteRule ^[[:alnum:]]+/+[0-9]+$ blog/item.php [E=SURI:1,L]
RewriteRule ^[[:alnum:]]+/+favicon/.ico$ blog/favicon.ico.php [E=SURI:1,L]
RewriteRule ^[[:alnum:]]+/+index/.gif$ blog/index.gif.php [E=SURI:1,L]
RewriteCond %{ QUERY_STRING } (^|&)pl=([0-9]+)
RewriteRule ^[[:alnum:]]+/+index/.php$ %2 [NE,L]
RewriteCond %{ REQUEST_FILENAME } -f [OR]
RewriteCond %{ REQUEST_FILENAME } -d 
RewriteRule !^(blog|cache)/ – [L]      
RewriteRule ^[[:alnum:]]+/+(entry|attachment|category|keylog|tag|search|plugin)/? blog/$1/index.php [E=SURI:1,L]
RewriteRule ^[[:alnum:]]+/+(.+)/[0-9]+$ blog/$1/item.php [E=SURI:1,L]
RewriteRule ^[[:alnum:]]+/+(.+)$ blog/$1/index.php [E=SURI:1,L]

具体内容需要按照自己使用时候不同而设置不同。同样上面的信息可以直接写进 Apache 的 conf 文件里面,用样有效。 如果生成文件后 就只对该目录有效。

Apache 官方的说明书 http://httpd.apache.org/docs/2.0/misc/rewriteguide.html

这个是个很好的东西,还需要具体研究一下。

具体例子如下:

目标 重写设置 说明
规范化URL RewriteRule ^/~([^/]+)/?(.*) /u/$1/$2 [R] 将/~user重写为/u/user的形式
  RewriteRule ^/([uge])/([^/]+)$ /$1/$2/ [R] 将/u/user末尾漏掉的/补上
     
规范化HostName RewriteCond %{ HTTP_HOST } !^fully/.qualified/.domain/.name [NC] 域名不合格
  RewriteCond %{ HTTP_HOST } !^$ 不空
  RewriteCond %{ SERVER_PORT } !^80$ 不是80端口
  RewriteRule ^/(.*) http://fully.qualified.domain.name:%{ SERVER_PORT }/$1 [L,R] 重写
  RewriteCond %{ HTTP_HOST } !^fully/.qualified/.domain/.name [NC]  
  RewriteCond %{ HTTP_HOST } !^$  
  RewriteRule ^/(.*) http://fully.qualified.domain.name/$1 [L,R]  
     
URL根目录转移 RewriteEngine on  
  RewriteRule ^/$ /e/www/ [R] 从/移到/e/www/
     
末尾目录补斜线 RewriteEngine on  
(目录范围内) RewriteBase /~quux/  
  RewriteRule ^foo$ foo/ [R] /~quux/foo是一个目录,补/
     
  RewriteEngine on  
  RewriteBase /~quux/  
  RewriteCond %{ REQUEST_FILENAME } -d 如果请文件名是个目录
  RewriteRule ^(.+[^/])$ $1/ [R] URL末尾不是斜线时补上
     
Web集群 RewriteEngine on  
  RewriteMap user-to-host txt:/path/to/map.user-to-host 用户-服务器映射
  RewriteMap group-to-host txt:/path/to/map.group-to-host 组-服务器映射
  RewriteMap entity-to-host txt:/path/to/map.entity-to-host 实体-服务器映射
  RewriteRule ^/u/([^/]+)/?(.*) http://${ user-to-host:$1|server0 }/u/$1/$2 用户均衡
  RewriteRule ^/g/([^/]+)/?(.*) http://${ group-to-host:$1|server0 }/g/$1/$2 组均衡
  RewriteRule ^/e/([^/]+)/?(.*) http://${ entity-to-host:$1|server0 }/e/$1/$2 实体均衡
  RewriteRule ^/([uge])/([^/]+)/?$ /$1/$2/.www/  
  RewriteRule ^/([uge])/([^/]+)/([^.]+.+) /$1/$2/.www/$3/  
     
URL根目录搬迁 RewriteEngine on  
  RewriteRule ^/~(.+) http://newserver/~$1 [R,L] 到其它服务器
     
所用户名首字母分 RewriteEngine on  
  RewriteRule ^/~(([a-z])[a-z0-9]+)(.*) /home/$2/$1/.www$3 内一层括号为$2
     
NCSA imagemap移 RewriteEngine on  
植为mod_imap RewriteRule ^/cgi-bin/imagemap(.*) $1 [PT]  
     
多目录查找资源 RewriteEngine on  
  # first try to find it in custom/…  
  RewriteCond /your/docroot/dir1/%{ REQUEST_FILENAME } -f  
  RewriteRule ^(.+) /your/docroot/dir1/$1 [L]  
  # second try to find it in pub/…  
  RewriteCond /your/docroot/dir2/%{ REQUEST_FILENAME } -f  
  RewriteRule ^(.+) /your/docroot/dir2/$1 [L]  
  # else go on for other Alias or ScriptAlias directives,  
  RewriteRule ^(.+) – [PT]  
     
据URL设置环境变量 RewriteEngine on  
  RewriteRule ^(.*)/S=([^/]+)/(.*) $1/$3 [E=STATUS:$2]  
     
虚拟主机 RewriteEngine on  
  RewriteCond %{ HTTP_HOST } ^www/.[^.]+/.host/.com$ 基于用户名
  RewriteRule ^(.+) %{ HTTP_HOST }$1 [C]  
  RewriteRule ^www/.([^.]+)/.host/.com(.*) /home/$1$2  
     
内外人有别 RewriteEngine on  
  RewriteCond %{ REMOTE_HOST } !^.+/.ourdomain/.com$ 基于远程主机
  RewriteRule ^(/~.+) http://www.somewhere.com/$1 [R,L]  
     
错误重定向 RewriteEngine on  
  RewriteCond /your/docroot/%{ REQUEST_FILENAME } !-f 不是regular文件
  RewriteRule ^(.+) http://webserverB.dom/$1  
     
程序处理特殊协议 RewriteRule ^xredirect:(.+) /path/to/nph-xredirect.cgi/$1 / Xredirect协议
  [T=application/x-httpd-cgi,L]  
     
最近镜像下载 RewriteEngine on  
  RewriteMap multiplex txt:/path/to/map.cxan 顶级域名与最近ftp服务器映射
  RewriteRule ^/CxAN/(.*) %{ REMOTE_HOST }::$1 [C]  
  RewriteRule ^.+/.([a-zA-Z]+)::(.*)$ ${ multiplex:$1|ftp.default.dom }$2 [R,L] 据顶级域名不同提供不同的FTP服务器
     
基于时间重写 RewriteEngine on  
  RewriteCond %{ TIME_HOUR }%{ TIME_MIN } >0700  
  RewriteCond %{ TIME_HOUR }%{ TIME_MIN } <1900  
  RewriteRule ^foo/.html$ foo.day.html 白天为早晚7点间
  RewriteRule ^foo/.html$ foo.night.html 其余为夜间
     
向前兼容扩展名 RewriteEngine on  
  RewriteBase /~quux/  
  # parse out basename, but remember the fact  
  RewriteRule ^(.*)/.html$ $1 [C,E=WasHTML:yes]  
  # rewrite to document.phtml if exists  
  RewriteCond %{ REQUEST_FILENAME }.phtml -f 如果存在$1.phtml则重写
  RewriteRule ^(.*)$ $1.phtml [S=1]  
  # else reverse the previous basename cutout  
  RewriteCond %{ ENV:WasHTML } ^yes$ 如果不存在$1.phtml,则保持不变
  RewriteRule ^(.*)$ $1.html  
     
文件改名(目录级) RewriteEngine on 内部重写
  RewriteBase /~quux/  
  RewriteRule ^foo/.html$ bar.html  
     
  RewriteEngine on 重定向由客户端再次提交
  RewriteBase /~quux/  
  RewriteRule ^foo/.html$ bar.html [R]  
     
据浏览器类型重写 RewriteCond %{ HTTP_USER_AGENT } ^Mozilla/3.*  
  RewriteRule ^foo/.html$ foo.NS.html [L]  
  RewriteCond %{ HTTP_USER_AGENT } ^Lynx/.* [OR]  
  RewriteCond %{ HTTP_USER_AGENT } ^Mozilla/[12].*  
  RewriteRule ^foo/.html$ foo.20.html [L]  
  RewriteRule ^foo/.html$ foo.32.html [L]  
     
动态镜像远程资源 RewriteEngine on  
  RewriteBase /~quux/  
  RewriteRule ^hotsheet/(.*)$ http://www.tstimpreso.com/hotsheet/$1 [P] 利用了代理模块
     
  RewriteEngine on  
  RewriteBase /~quux/  
  RewriteRule ^usa-news/.html$ http://www.quux-corp.com/news/index.html [P]  
     
反向动态镜像 RewriteEngine on  
  RewriteCond /mirror/of/remotesite/$1 -U  
  RewriteRule ^http://www/.remotesite/.com/(.*)$ /mirror/of/remotesite/$1  
     
负载均衡 RewriteEngine on 利用代理实现round-robin效果
  RewriteMap lb prg:/path/to/lb.pl  
  RewriteRule ^/(.+)$ ${ lb:$1 } [P,L]  
     
  #!/path/to/perl  
  $| = 1;  
  $name = “www”; # the hostname base  
  $first = 1; # the first server (not 0 here, because 0 is myself)  
  $last = 5; # the last server in the round-robin  
  $domain = “foo.dom”; # the domainname  
  $cnt = 0;  
  while ( ) {  
  $cnt = (($cnt+1) % ($last+1-$first));  
  $server = sprintf(“%s%d.%s”, $name, $cnt+$first, $domain);  
  print “http://$server/$_”;  
  }  
  ##EOF##  
     
静态页面变脚本 RewriteEngine on  
  RewriteBase /~quux/  
  RewriteRule ^foo/.html$ foo.cgi [T=application/x-httpd-cgi]  
     
阻击机器人 RewriteCond %{ HTTP_USER_AGENT } ^NameOfBadRobot.*  
  RewriteCond %{ REMOTE_ADDR } ^123/.45/.67/.[8-9]$  
  RewriteRule ^/~quux/foo/arc/.+ – [F]  
     
阻止盗连你的图片 RewriteCond %{ HTTP_REFERER } !^$  
  RewriteCond %{ HTTP_REFERER } !^http://www.quux-corp.de/~quux/.*$ [NC] 自己的连接可不能被阻止
  RewriteRule .*/.gif$ – [F]  
     
  RewriteCond %{ HTTP_REFERER } !^$  
  RewriteCond %{ HTTP_REFERER } !.*/foo-with-gif/.html$  
  RewriteRule ^inlined-in-foo/.gif$ – [F]  
     
拒绝某些主机访问 RewriteEngine on  
  RewriteMap hosts-deny txt:/path/to/hosts.deny  
  RewriteCond ${ hosts-deny:%{ REMOTE_HOST }|NOT-FOUND } !=NOT-FOUND [OR]  
  RewriteCond ${ hosts-deny:%{ REMOTE_ADDR }|NOT-FOUND } !=NOT-FOUND  
  RewriteRule ^/.* – [F]  
     
用户授权 RewriteCond %{ REMOTE_IDENT }@%{ REMOTE_HOST } !^friend1@client1.quux-corp/.com$  
  RewriteCond %{ REMOTE_IDENT }@%{ REMOTE_HOST } !^friend2@client2.quux-corp/.com$  
  RewriteCond %{ REMOTE_IDENT }@%{ REMOTE_HOST } !^friend3@client3.quux-corp/.com$  
  RewriteRule ^/~quux/only-for-friends/ – [F]  
     
外部重写程序模板 RewriteEngine on  
  RewriteMap quux-map prg:/path/to/map.quux.pl  
  RewriteRule ^/~quux/(.*)$ /~quux/${ quux-map:$1 }  
     
  #!/path/to/perl  
  $| = 1;  
  while (<>) {  
  s|^foo/|bar/|;  
  print $_;  
  }  
     
搜索引擎友好 RewriteRule ^/products$ /content.php  
  RewriteRule ^/products/([0-9]+)$ /content.php?id=$1  
  RewriteRule ^/products/([0-9]+),([ad]*),([0-9]{ 0,3 }),([0-9]*),([0-9]*$) /marso/content.php?id=$1&sort=$2&order=$3&start=$4
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/146378.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 多模态机器学习综述翻译(转载)

    多模态机器学习综述翻译(转载)文章:《MultimodalMachineLearning:ASurveyandTaxonomy》多模态机器学习综述【摘要】我们对世界的体验是多模式的-我们看到物体,听到声音,感觉到纹理,闻到气味和尝到味道。模态是指某种事物发生或经历的方式,并且当研究问题包括多种这样的形式时,研究问题被描述为多模态。为了使人工智能在理解我们周围的世界方面取得进展,它需要能够一起解释这种多模信号。多模式机器学习旨在构建可以处理和关联来自多种模态信息的模型。这是一个充满活力的多学科领域,具有越来越重要的意义和非

  • sublime3激活码 2021【在线破解激活】

    sublime3激活码 2021【在线破解激活】,https://javaforall.cn/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

  • 3D游戏建模的入门学习方法及技巧

    3D游戏建模的入门学习方法及技巧选一个你感兴趣的模型利用你感兴趣的任何物品或形象的预制模型。选一个可以激发你想象,让你知道清楚知道自己的模型该是什么样子,该怎么动的模型。你可以根据自己的喜好和需要加强现有模型。预制模型可以让你在开始建模之前,体验模型的检查和操作。从简单模型入手从复杂3D模型入手,你可能会备受打击。选一个简单的结构,然后开始学习。你不仅想要学会3D建模的基本知识,还需要慢慢学习掌握不同的工具、技巧。瓶子一样的圆柱体是一个很好的入门模型。或者你可以用更简单的立方体来熟悉所有工具技巧的用法。复杂模型可能会.

  • linux下载安装yum(ubuntu安装yum工具)

    自动搜索最快镜像插件:yuminstallyum-fastestmirror安装yum图形窗口插件:yuminstallyumex1、安装yuminstall全部安装yuminstallpackage1安装指定的安装包package1yumgroupinsallgroup1安装程序组group12、更新和升级yumupdate全部更新yumupdatepackage1更新指定程序包package1yumcheck-update

  • navicat premium 激活码【永久激活】[通俗易懂]

    (navicat premium 激活码)最近有小伙伴私信我,问我这边有没有免费的intellijIdea的激活码,然后我将全栈君台教程分享给他了。激活成功之后他一直表示感谢,哈哈~https://javaforall.cn/100143.htmlIntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,上面是详细链接哦~MLZP…

  • access token

    最短时间来,打算把自己学习的东西都总结一遍,发到博客上面来。带大家来了解windows访问令牌0x00acesstoken的作用accesstoken的作用说简单点就是为了系统的安全0x

    2021年12月11日

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号