Apache Url Rewrite(mod_rewrite)

Apache mod_rewrite实战指南:从URL重写到生产级规则配置 URL重写是Web服务器路由控制的核心技术,其本质是通过正则匹配与条件判断,在请求处理早期动态修改请求路径或发起重定向。mod_rewrite作为Apache最常用且最易出错的模块,其原理根植于请求生命周期中的rewrite阶段,技术价值在于解耦前端友好URL与后端真实资源路径,支撑SEO优化、单页应用(SPA)路由、多域名管理等关键场景。本文聚焦Apache 2.4.x环境下mod_rewrite的真实工程实践,深入解析RewriteEngine状态继承、RewriteCond条件决策机制、Rewrite 阅读详情

本文链接: http://www.php-oa.com/2008/03/12/apacheurlrewritemod_rewrite.html

一、为什么需要用Apache Url Rewrite(mod_rewrite)

 

  网站的生命在于不断地进行更新和维护,根据业务发展的需求转移服务器进行维护、重新组织目录结构、变换URL甚至改变到新的域名等情况是经常发生的。为了 让客户不会因此受到任何影响,最好的方法就是使用Apache Rewrite Rule(Apache Url Rewrite)。

二、Apache Url Rewrite的作用范围

 1.使用在Apache主配置文件httpd.conf中。

 2.使用在httpd.conf里定义的虚拟主机配置中。

 3.使用在基本目录的跨越配置文件.htaccess中。

三、Apache Url Rewrite的应用条件

 当用户的Web请求最终被导向到某台Web服务器的Apache守护进程,Apache根据配置文件判断该请求是主配置还是虚拟主机,再根据用户 在浏览器中请求的URL来匹配Apache Url Rewrite,并且根据实际的请求路径匹配.htaccess中的Apache Url Rewrite,最后把请求的内容传回给用户。该响应可能有2种。

 1.将请求内容外部重定向(Redirect)到另一个URL

 让浏览器再次以新的URL发出请求(R=301或者R=302,临时的或是永久的重定向)。

 例如,一个网站有正规的URL和别名URL,对别名URL进行重定向到正规URL,或者网站改换成了新的域名,则把旧的域名重定向到新的域名。

 2.由Apache内部子请求代理产生新的内容送回给客户

 这是Apache内部根据重写后的URL,通过代理模块请求内容并将最终内容送回给客户,客户端浏览器不必再次请求,浏览器中的URL不会被重写,但实际内容由Apache根据Apache Url Rewrite后的URL生成。

 例如,在公司防火墙上运行的Apache启动这种代理Apache Url Rewrite,代理对内部网段上的Web服务器的请求。

四、Apache Url Rewrite怎样工作

 我们假定在编译Apache时已经把mod_rewrite编译成模块,确信您的httpd.conf中有LoadModule rewrite_module libexec/mod_rewrite.so,并且在Addmodule中有Addmodule mod_rewrite.c,则可以使用Apache Url Rewrite。

 当外部请求到达Apache,Apache调用Apache Url Rewrite中的定义来重写由用户浏览器指定请求的URL,最后被重写的URL如果是重定向,则送交浏览器做再一次请求;如果是代理则把重写后的URL 交给代理模块请求最终的内容(Content),最后把内容送回给浏览器。

五、何时使用.htaccess中的Apache Url Rewrite定义

 假如您对网站内容所在的服务器没有管理员权限,或者您的网站内容放在ISP的服务器上托管,无法改写配置文件,但是您对Web站点内容所在的目录 有写权限,则可以设置自己的.htaccess文件达到同样的目的。但您需要确定主配置文件中对您的网站所在的目录定义了下面的内容,否则您 的.htaccess不会工作。

 < Directory /usr/local/apache/htdocs/www.abc.com> options indexes followsymLinks

 allowoverride all

 < /Directory >

六、应用举例

 假定Apache被编译安装在主机192.168.1.xx的/usr/local/apache目录下面,同时编译了重写和代理模块。

 1.隐藏Apache下的某个目录,使得对该目录的任何请求都重定向到另一个文件

 (1)httpd.conf的实现方法

 我们将下面的部分放到/usr/local/apache/conf/httpd.conf中。

 < Directory “/usr/local/apache/htdocs/manual/”>

 options Indexes followsymlinks

 allowoverride all
 rewriteengine on
 rewritebase /
 rewriterule ^(.*)$ index.html.en [R=301]

 < /Directory >

 注: “rewriteengine on”为重写引擎开关,如果设为“off”,则任何Apache Url Rewrite定义将不被应用,该开关的另一用处就是如果为了临时去掉Apache Url Rewrite,可以将引擎开关设为“off”再重新启动Apache即可,不必将其中的各条Apache Url Rewrite注释掉。

 “rewritebase /”的作用是如果在下面的rewriterule定义中被重写后的部分(此处为文件名
index.html.en)前面没有“/”,则表明是相对目录,相对于这个rewritebase后面的定义也就是/usr/local/apache /htdocs/index.html.en,否则,如果此处没有“rewritebase /”这一项,则被重写成http://192.168.1.xx/usr/local/apache/htdocs/manual /index.html.en,显然是不正确的。

 我们也可以不用“rewritebase /”,而是将其改为如下部分。

 rewriteengine on
 rewriterule ^(.*)$ /index.html.en [R=301]

 或者更改为:

 rewriteengine on
 rewriterule ^(.*)$ http://192.168.1.xx/index.html.en [R=301]

 (2).htaccess的实现方法

 我们将下面的部分放到httpd.conf中。

 < Directory “/usr/local/apache/htdocs/manual/”>

options Indexes followsymlinks

 allowoverride all

 < /Directory >

 然后将下面的部分放到/usr/local/apache/htdocs/manual/.htaccess中。

 rewriteengine on
 rewritebase /
 rewriterule ^(.*)$ index.html.en [R=301]

 注: 对文件.htaccess所做的任何改动不需要重启动Apache。

 您还可以利用.htaccess方案将这个manual目录重定向到用户phpoa自己的主目录。

 rewriteengine on
 rewritebase /~phpoa/
 rewriterule ^(.*)$ $1 [R=301]

 这样,对manual目录下任何文件的请求被重定向到~phpoa目录下相同文件的请求。

 2.将http://www.username.domain.com对于username的主页请求转换为对http://
www.domain.com/username的请求

 对于HTTP/1.1的请求包括一个Host: HTTP头,我们能用下面的规则集重写http://
www.username.domain .com/anypath到/home/username/anypath。

 rewriteengine on
 rewritecond %{HTTP_HOST} ^www.[^.] .host.com$
 rewriterule ^(. ) %{HTTP_HOST}$1 [C]
 rewriterule ^www.([^.] ).host.com(.*) /home/$1$2

 注: “rewritecond”表明是条件Apache Url Rewrite,当满足后面定义的条件后才会应用下面的重写规
则,“rewritecond”有各种变量,请查阅相关文档。

 3.防火墙上的Apache Url Rewrite代理内部网段上服务器的请求

 NameVirtualhost 1.2.3.4

 < Virtualhost 1.2.3.4:80 > servername www.domain.com

 rewriteengine on
 proxyrequest on
 rewriterule ^/(.*)$ http://192.168.1.3/$1 [P,L]

 < /Virtualhost >

 注: 当外部浏览器请求http://www.domain.com时,将被解析到IP地址1.2.3.4,Apache交由mod_rewrite处理,转换 成http://192.168.1.3/$1后再交由代理模块mod_proxy,得到内容后传送回用户的浏览器。

 4.基本预先设定的转换Map表进行重写rewritemap

 转换http://www.domain.com/{countrycode}/anypath到Map表中规定的URL,前面是虚拟主机中的定义。

 rewritelog /usr/local/apache/logs/rewrite.log
 rewriteloglevel 9
 rewriteengine on
 proxyrequest on
 rewritemap sitemap txt:/usr/local/apache/conf/rewrite.map
 rewriterule ^/([^/] ) /(.*)$ http://%{REMOTE_HOST}::$1 [C]
 rewriterule (.*)::([a-z] )$ ${sitemap:$2|http://h.i.j.k/} [R=301,L]

 文件/usr/local/apache/conf/rewrite.map的内容如下:

 sg http://a.b.c.d/
 sh http://e.f.g.h/

 注: 当用户请求http://www.domain.com/sg/anypath时被重写为http://a.b.c.d/anypath。当需要调试时请 用rewritelog和 rewriteloglevel 9联合,9为最大,即得到最多的调试信息;最小为1,表示得到最少的调试信息;默认为0,表示没有调试信息。

Debian 10 Apache mod_rewrite 实战指南:URL重写、301跳转与伪静态配置 URL重写是Web服务器处理请求路径的核心机制,其原理在于HTTP请求进入Apache后、文件系统映射前,通过正则匹配与条件判断动态修改REQUEST_URI,从而实现路由控制、SEO优化和用户体验提升。该技术具有显著的工程价值:既可卸载应用层解析逻辑(如WordPress永久链接),又能统一安全策略(如强制HTTPS、WWW标准化)。典型应用场景包括网站迁移时的301重定向、CMS伪静态化、移动设备分流及CDN协同调度。在Debian 10这一长期支持的生产环境上,需特别关注a2enmod模块启用流程、A 阅读详情

相关推荐

3D点云目标检测Complex-YOLO(训练篇)(一)———KITTI数据集预处理与制作

KITTI dataset Download dataset KITTI 3D Object Detection Evaluation 2017 link 下载四个部分,共41.4GB 解压后为四部分内容(相机校准矩阵calib、RGB图像image_2、标签label_2、点云数据velodyne) 对应的testing和training数据。其中,training数据为7481张(图片和点云对应的场景),testing数据 7518张(无label_2数据)。 Data Preprocess

“知识最大的敌人不是无知,而是错觉” 7152

nginx反向代理和rewrite进行解决跨域问题、去掉url中的一部分字符串,通过nginx正则生成新的url...

场景:表面上访问的是http://127.0.0.1:7777/test/xhtml//tpl/app-tpl-webapp/css/base.css, 实际上看的是http://127.0.0.1:8888/tpl/app-tpl-webapp/css/base.css的内容。 server { listen 7777; server_name...

weixin_33763244的博客 1952

什么是URL Rewrite?URL Rewrite有什么用?

URL Rewrite的概念 URL Rewrite即URL重写,就是把传入Web的请求重定向到其他URL的过程。URL Rewrite最常见的应用是URL伪静态化,是将动态页面显示为静态页面方式的一种技术。比如http://www.123.com/news/index.asp?id=123 使用UrlRewrite转换后可以显示为 http://www.123.com/news/123.h

观千剑而后识器,操千曲而后晓声。 2万+

电驱系统功率级“多合一”解决方案

如何提升电驱动系统的产品性能、减小能耗和进一步轻量化,以加强整车市场竞争力,是摆在国内外新能源车企面前的共同课题。为此,具有多年动力总成电子系统开发经验的美国著名半导体及电子解决方案专家——德州仪器(Texas Instrument)提出了多种功率级别“多合一”整合方案和设计思路,助力新能源车企提升技术优势。

yessunday的专栏 1372

把 sy-* 带进 ABAP CDS:ABAP 7.50 里的环境信息新姿势($session 与 @Environment.systemField 实战)

摘要:ABAP 7.50在CDS视图中引入两种获取环境信息的方式:1)直接使用$session会话变量读取用户、客户端和系统语言;2)通过@Environment.systemField注解参数,由Open SQL自动注入系统字段。$session方式简单但依赖Open SQL访问路径,非ABAP环境下可能失效;注解参数方案更工程化,依赖关系明确且支持测试。建议ABAP体系内优先使用$session,对外接口采用参数化方案。两种方式各有适用场景,正确选择可避免潜在风险。(148字)

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 154

如何在 Ubuntu 16.04 上使用 mod_rewrite 重写 Apache 的 URL

在本教程中,我们将激活并学习如何使用 Apache 2 的模块来管理 URL 重写。该模块允许我们以更清晰的方式重写 URL,将人类可读的路径转换为对代码友好的查询字符串,或者基于额外条件重定向 URL。本指南分为两部分。第一部分设置一个示例网站,并涵盖一个简单的重写示例。第二部分包含两个更深入的常用重写规则示例。

rubys007的博客 1651

Python爬虫案例——解密抓取西红柿小说《我不是戏神》全章节!!!

本文介绍了抓取番茄小说网站《我不是戏神》全本内容的完整流程。首先分析网站反爬机制,发现采用自定义混淆字体加密文本内容。通过下载字体文件并解析字符映射关系,组建本地字体映射表。随后编写Python爬虫程序,实现自动获取章节链接、请求加密内容、解密替换字体、保存为本地txt文件等功能。代码包含UA伪装、请求头设置、进度条显示等细节处理,最终实现小说内容的完整抓取与解密存储。

@优快云盲敲代码的阿豪的博客 661

debian apache_如何在Debian 10上使用mod_rewrite为Apache重写URL

debian apache 介绍 (Introduction) Apache’s mod_rewrite module lets you rewrite URLs in a cleaner fashion, translating human-readable paths into code-friendly query strings. It also lets you rewrite URLs...

491

Python 爬虫实战:抓取新闻网站上的新闻标题和内容

随着信息化的进展,新闻网站已经成为人们获取新闻和时事资讯的主要途径。许多新闻网站提供了丰富的内容,涵盖了社会、政治、科技、娱乐等多个领域。通过抓取新闻网站的内容,我们可以分析新闻的趋势,获取某一领域的最新动态,甚至为数据分析和机器学习提供数据支持。本文将详细介绍如何使用 Python 编写爬虫,抓取新闻网站上的新闻标题和内容。requests:发送 HTTP 请求,获取页面内容。:解析 HTML 页面并提取数据。Selenium:抓取动态加载的网页内容。新闻API。

2201_76125261的博客 3408

6.4 直流无刷电机(BLDC):测试与性能评估

本文系统阐述了直流无刷电机(BLDC)的测试与性能评估方法,涵盖参数测量、性能测试、测试平台设计及可靠性评估。详细介绍了绕组电阻、电感和反电动势的测量原理与修正方法,以及转矩-转速特性、效率分析和动态响应测试的技术要点。通过搭建高精度测功机系统,结合自动化数据处理,实现对电机性能的全面评估。最后讨论了温升、振动、EMC等特殊测试方法,为BLDC电机的设计验证和质量控制提供了完整的技术路径。

技术工作者 444

Apache Mod_Rewrite模块在Linux下的HTTP URL重写

例如,管理员可以将冗长且难以记忆的URL转换为简洁、有意义的URL,这不仅提高了网站的可读性,还有助于提升用户体验和SEO效果。通过其强大的正则表达式支持和灵活的规则配置,管理员可以轻松地优化网站的URL结构,提升用户体验和SEO效果。例如,使用mod_rewrite的RewriteRule指令,可以将旧的URL模式映射到新的URL上,从而实现自动重定向。其中,Mod_Rewrite模块是实现HTTP URL重写的核心工具,对于提升网站SEO、用户体验以及网站安全性具有不可估量的价值。

weixin_73725158的博客 432

我的宠物狗学编程:从零开始的代码之旅

在这个示例中,我们定义了一个名为"interact"的函数,它通过输入函数获取用户的输入,并根据输入执行相应的代码块。在编程中,我们使用条件语句来根据不同的条件执行不同的代码块。对于我的狗狗,我将创建一个名为"feed"的函数来表示它的进食行为,并根据不同的条件输出不同的信息。在这个示例中,我们定义了一个名为"feed"的函数,并使用一个参数"food"来表示食物。对于我的狗狗,我将创建一个名为"dog_name"的变量来存储它的名字。对于我的狗狗,我将创建一个名为"bark"的函数来表示它的叫声。

2301_79331387的博客 333

使用apache Rewrite_mod模块完成URL重写

步骤:1.开启apache Rewrite_mod模块。 httpd.conf106H       去掉 LoadModule rewrite_module modules/mod_rewrite.so之前的#2.在配置文件末尾添加虚拟主机配置 NameVirtualHost *:80 DocumentRoot e:/test ServerName ww

950

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Apache模块 mod_rewrite 及 初级URL重写指南

Apache模块 mod_rewrite 初级URL重写指南

expleeve 933

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

php 伪静态 (url rewrite mod_rewrite 重写) 本地APACHE支持urlrewrite 本地APACHE支持.htaccess

<br />mod_rewrite是Apache的一个非常强大的功能,它可以实现伪静态页面。下面我详细说说它的使用方法!对初学者很有用的哦!<br />1.检测Apache是否支持mod_rewrite<br />通过php提供的phpinfo()函数查看环境配置,通过Ctrl+F查找到“Loaded Modules”,其中列出了所有apache2handler已经开启的模块,如果里面包括“mod_rewrite”,则已经支持,不再需要继续设置。<br />如果没有开启“mod_rewrite”,则打开目录

yangjiehuan的专栏 1559

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

Windows下开启apache Mod_rewrite模块及URL全伪

系 统 信 息 PHP程式版本:    5.2.0MYSQL 版本:    5.0.27-community-nt服务器端信息:  Apache/2.2.4 (WinXP) PHP/5.2.0一 开启Mod_rewrite模块打开Apache2/conf/httpd.conf搜索 LoadModule rewrite_module modules/mod_rewrite.so  (Apache2是

1478

Apache Mod_Rewrite实现URL重写的配置方法

原文:http://www.leapsoul.cn/?p=25 配置步骤:   第一步:找到apache的配置文件httpd.conf(文件在conf目录下)   第二步:你首先必须得让服务器支持mod_rewrite,如果你使用的是虚拟主机,请事先询问你的主机提供商。   打开httpd.conf,找到   #LoadModule rewrite_module

kankan231的专栏 857

apache配置mod_rewrite url重写相关

Apache模块 mod_rewrite 说明 一个基于一定规则的实时重写URL请求的引擎 状态 扩展(E) 模块名 rewrite_module 源文件 mod_rewrite.c 兼容性 仅在 Apache 1.3 及以后的版本中可用 概述 此模块

sunnydayzx的专栏 1133

Ubuntu 20.04 Apache mod_rewrite 实战:URL重写与重定向原理

URL重写是Web服务器实现SEO友好、RESTful路由和前后端解耦的核心能力。其底层原理依赖Apache的请求处理生命周期与正则匹配机制,在Ubuntu 20.04默认的Apache 2.4环境中,需特别关注AllowOverride权限配置与mod_rewrite模块加载状态。技术价值在于零代码改造即可统一URL形态、保障搜索引擎权重平滑迁移,并支撑WordPress、Laravel等主流框架的permalink功能。典型应用场景包括.html后缀隐藏、旧链接301跳转、子目录路径标准化及查询参数控制

cucanqi9387的博客 417

URL重写指南(Apache模块 mod_rewrite)

URL重写指南(Apache模块 mod_rewrite)参考文档 地址:[color=red]http://man.chinaunix.net/newsoft/ApacheMenual_CN_2.2new/rewrite/rewrite_guide.html[/color] 地址:[color=red]http://w.yi.org/ftp/FAPM/apache/Apache2/z...

lovexuwenhao的专栏 141

Apache URL重写 apache mod_rewrite RewriteRule RewriteCond使用

Apache服务器带有的mod_rewrite.c模块,可以实现任意映射的URL重写规则。 mod_rewrite提供了基于正则表达式规则动态修改传入的请求的 URL 的方法。 这允许你以自己喜欢的任意方法映射任意 URL 到你的内部 URL 结构。 原始技术文章出处: 中文简述:http://httpd.apache.org/docs/current/rewrite/ 基本介绍:http

雷雨的专栏 311
上一篇: php 图片上传类代码
下一篇: 完善的(escape/unescape/unicode_utf8)PHP互转函数
goingdownba
博客等级 码龄23年 28粉丝 17原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值