apache mod_rewrite是一个可以钻研得非常深的东西,但是你也可以非常简单的使用它。
下面我以几个例子来说明如何在apache中配置mod_rewrite

0.目录

1. 如何把 http://www.host.com/sample.php?city=bj&id=69632 这样的url用 http://www.host.com/s_bj_69632.html 这样的方式呈现给用户
2. 如何将 http://www.host123.com/ 域名的访问,全部定向到 http://www.host.com
3. 如何将 http://***.host.com/ 这样的地址根据不同的***,指向不同的路径
4. 如何调试你的配置
5. 如何设置apache作为代理服务器,这个和rewrite无关,但是有时候也会用到

1. 如何把 http://www.host.com/sample.php?city=bj&id=69632 这样的url用 http://www.host.com/s_bj_69632.html 这样的方式呈现给用户

<VirtualHost *>
    ...
   
    RewriteEngine on        # 这一行表示打开rewrite功能,当然需要apache安装了mod_rewrite
    RewriteRule ^/s_(.*)_(.*).html /sample.php?city=$1&id=$2 [L]
# $1和$2分别表示正则表达式中匹配的内容
# [L]表示如果这条规则匹配成功了,就不再继续匹配下面的规则了,也就是说RewriteRule可以有多条,通常为了避免出错,建议大家都加上 [L] 标记
# 如果把[L]写成[R, L],那么,当用户在地址栏输入 http://www.host.com/s_bj_69632.html 这样的连接时,会自动跳转到 http://www.host.com/sample.php?city=bj&id=69632,这个根据具体的应用需求来定就可以了。

...
</VirtualHost>

2. 如何将 http://www.host123.com/ 域名的访问,全部定向到 http://www.host.com

<VirtualHost *>
    ...
   
    RewriteEngine on
    RewriteRule ^/(.*) http://www.host.com/$1 [L,R,NE]
# NE表示对$1不要进行url编码。如果没有这个参数,会导致重复编码。
# 注意 rewrite不要求 www.host123.com 和 www.host.com 在同一台服务器

...
</VirtualHost>

3. 如何将 http://***.host.com/ 这样的地址根据不同的***,指向不同的路径

<VirtualHost *>
    ...

RewriteEngine on
    RewriteMap lowercase int:tolower        # 转化为小写
    RewriteMap vdomain txt:/usr/local/etc/city.txt
# 设置映射的配置文件(格式:文件名),/usr/local/etc/city.txt文件内容见后面
# 当我们数据量比较小的时候,使用txt就可以了,如果数据量比较大了,可以使用dbm文件格式来提高效率

RewriteCond %{SCRIPT_FILENAME} !^/cgi-bin/
# 为了安全,包含cgi-bin这样的url不进行处理

RewriteCond ${lowercase:%{HTTP_HOST}} ^([^:]+)
#将域名转化为小写

RewriteCond ${vdomain:%1} ^(.+)$
#在vdomain指定的文件中寻找对应值,后面用%1代表

RewriteRule ^(.*)$ /%1/$1 [L,NE]
# %1 表示上面对应的路径

...
</VirtualHost>

/usr/local/etc/city.txt文件内容
bj   /usr/local/apache/htdocs/city/010
sh   /usr/local/apache/htdocs/city/021
gz   /usr/local/apache/htdocs/city/020

这样使用 http://bj.host.com 访问时,他实际的路径是 /usr/local/apache/htdocs/city/010 而不是 /usr/local/apache/htdocs 了

4. 如何调试你的配置

我们经常发现配置不能按预想的执行,但是又不只到错误在那里
在配置中增加两行记录log

RewriteLog "/usr/local/apache/logs/rewrite.log"
# log文件名
    RewriteLogLevel 1
# log级别,从0到9,0表示关闭log,数越大log越详细。同时对apache消耗越大,正式服务中应该关闭log。

5. 如何设置apache作为代理服务器,这个和rewrite无关,但是有时候也会用到

首先要apache安装mod_proxy
然后再配置中添加
    ProxyPass /bj/ http://bj.host.com/
    ProxyPassReverse /bj/ http://bj.host.com/
   
这样在用户访问 http://www.host.com/bj/ 时,就如同访问 http://bj.host.com/ 一样了。

apache mod_rewrite 简略说明相关推荐

  1. 关于Apache mod_rewrite的中文配置、使用和语法介绍(实现URL重写和防盗链功能)

    介绍和配置: 以数据库后台驱动的动态内容的网站,经常会遇到这些的问题: 当在浏览器的地址栏输入一个无效的参数时,会出现数据库的错误提示,这是一个安全的隐患 搜索引擎无法收录你的所有网页 网页的链接地址 ...

  2. 开启Apache mod_rewrite模块(解决404 Not Found)

    网站搭建完成了,进入登录界面就是访问不了. 原因大概是没有开启Apache mod_rewrite模块,或者没有配置完全. 步骤1: 启用mod_rewrite模块 在conf目录的httpd.con ...

  3. openSUSE中启用apache mod_rewrite

    1. 编辑 "/etc/sysconfig/apache2"文件 查找 APACHE_MODULES,你应该会找到一行像 APACHE_MODULES="actions ...

  4. 启用Apache Mod_rewrite模块

    Ubuntu 环境 在终端中执行 sudo a2enmod rewrite 指令后,即启用了 Mod_rewrite 模块. 另外,也可以通过将 /etc/apache2/mods-available ...

  5. 开启Apache mod_rewrite模块完全解答

    启用mod_rewrite模块 在conf目录的httpd.conf文件中找到 LoadModule rewrite_module modules/mod_rewrite.so 将这一行前面的#去掉. ...

  6. ubuntu 开启 apache mod_rewrite

    2019独角兽企业重金招聘Python工程师标准>>> ci里需要隐藏index.php的输入需要使用apache的rewrite模块,按照下面的步骤开启mod_rewrite ht ...

  7. html%2b怎么转换成加号,Apache mod_rewrite%2B和加号(+)符号

    不,这与引用的问题不完全相同.这里的问题特别是加号和Apache的答案:mod_rewrite:Spcaes& URL中的特殊字符无法正常工作. 斜杠也存在问题,请参阅http://httpd ...

  8. Apache mod_rewrite

    mod_rewrite是Apache的一个非常强大的功能,它可以实现伪静态页面.下面我详细说说它的使用方法!对初学者很有用的哦! 1.检测Apache是否支持mod_rewrite phpinfo() ...

  9. Debian/Ubuntu Apache Mod_Rewrite 安装

    使用如下指令后,即启用了 Mod_rewrite 模块. sudo a2enmod rewrite 另外,也可以通过将 /etc/apache2/mods-available/rewrite.load ...

  10. php mod rewrite.so,开启Apache mod_rewrite模块完全解答

    用mod_rewrite模块 在conf目录的httpd.conf文件中找到 LoadModule rewrite_module modules/mod_rewrite.so 将这一行前面的#去掉. ...

最新文章

  1. javascript对象之window对象详解
  2. 独家 | 简单三步实现Python脚本超参数调优(附代码)
  3. 2013计算机视觉代码合集
  4. npm与Yarn命令对比
  5. 全国计算机考试光盘,全国计算机一级模拟考试题(光盘).doc
  6. 移动端设备标识码/设备唯一标识码/设备唯一性
  7. Anti-Screen Capture(Prevent Screen Captures)截屏与反截屏
  8. 1.MySQL数据库的介绍
  9. Compile qt-2.3.10
  10. 普歌-码上鸿鹄团队-复习系统模块
  11. 输入任意一个字符串,判断这个字符串是否是回文,回文示例: 上海自来水来自海上
  12. php获取手机的mac地址,Android手机获取Mac地址的几种方法
  13. php 输入出生年月日计算年纪,PHP实现根据出生年月日计算年龄的功能(代码示例)...
  14. web前端网页制作课作业:用DIV+CSS技术设计的静态网站【四大名著】中国传统文化主题题材设计
  15. 不会R语言也能作出高大上的科研图片
  16. 《前方的路》读书笔记
  17. 干货|可视化设计:百度地图路线
  18. Mysql数据库报错:Row size too large (> 8126). Changing some columns to TEXT or BLOB or using ROW_FORMAT=DY
  19. 我的世界java作弊怎么开_我的世界怎么开作弊模式 开启方法介绍
  20. 复赛了?“移动云杯”复赛模式开启!

热门文章

  1. SAP供应商主数据中税号1-5的用途
  2. 20829-55-4,cyclo-(L-Trp-L-Trp),cyclo-L-tryptophan-L-tryptophan,cyclo(Trp-Trp)
  3. 我的IOS端SIP电话开发历程
  4. 一个故事看懂计算机操作系统的进化史
  5. [译]-100行代码从零实现 Facebook 的 Recoil 库
  6. LeetCode刷题-190709-扩展:阿拉伯数字和中文数字转换
  7. 20221115使用google文档翻译SRT格式的字幕
  8. 【Codeforces Round #551 (Div. 2) C. Serval and Parenthesis Sequence(Java版)
  9. 创业公司天使轮、A轮、B轮、IPO融资时股权问题
  10. 【数学知识】非线性方程求解的二分法以及牛顿迭代法