0

0

讲解RewriteCond和13个mod_rewrite应用举例Apache伪静态 的相关知识

jacklove

jacklove

发布时间:2018-06-11 10:58:31

|

2526人浏览过

|

来源于php中文网

原创

免费语音克隆
免费语音克隆

这是一个提供免费语音克隆服务的平台,用户只需上传或录制一段 5 秒以上的清晰语音样本,平台即可生成与用户声音高度一致的 AI 语音克隆。

下载

1.给子域名加www标记 
rewritecond %{http_host} ^([a-z.]+)?example\.com$ [nc] 
rewritecond %{http_host} !^www\. [nc] 
rewriterule .? http://www.xample.com%{request_uri} [r=301,l] 
这个规则抓取二级域名的%1变量,如果不是以www开始,那么就加www,以前的域名以及{request_uri}会跟在其后。
2.去掉域名中的www标记 
rewritecond %{http_host} !^example\.com$ [nc] 
rewriterule .? http://example.com%{request_uri} [r=301,l] 
3.去掉www标记,但是保存子域名 
rewritecond %{http_host} ^www\.(([a-z0-9_]+\.)?example\.com)$ [nc] 
rewriterule .? http://%1%{request_uri} [r=301,l] 
这里,当匹配到1%变量以后,子域名才会在%2(内部原子)中抓取到,而我们需要的正是这个%1变量。 
4.防止图片盗链
一些站长不择手段的将你的图片盗链在他们网站上,耗费你的带宽。你可以加一下代码阻止这种行为。 
rewritecond %{http_referer} !^$ 
rewritecond %{http_referer} !^http://(www\.)?example\.com/ [nc] 
rewriterule \.(gif|jpg|png)$ - [f] 
如果{http_referer}值不为空,或者不是来自你自己的域名,这个规则用[f]flag阻止以gif|jpg|png 结尾的url 
如果对这种盗链你是坚决鄙视的,你还可以改变图片,让访问盗链网站的用户知道该网站正在盗用你的图片。 
rewritecond %{http_referer} !^$ 
rewritecond %{http_referer} !^http://(www\.)?example\.com/.*$ [nc] 
rewriterule \.(gif|jpg|png)$ 你的图片地址 [r=301,l] 
除了阻止图片盗链链接,以上规则将其盗链的图片全部替换成了你设置的图片。 
你还可以阻止特定域名盗链你的图片: 
rewritecond %{http_referer} !^http://(www\.)?leech_site\.com/ [nc] 
rewriterule \.(gif|jpg|png)$ - [f,l] 
这个规则将阻止域名黑名单上所有的图片链接请求。 
当然以上这些规则都是以{http_referer}获取域名为基础的,如果你想改用成ip地址,用{remote_addr}就可以了。
5.如果文件不存在重定向到404页面 
如果你的主机没有提供404页面重定向服务,那么我们自己创建。 
rewritecond %{request_filename} !-f 
rewritecond %{request_filename} !-d 
rewriterule .? /404.php [l] 
这里-f匹配的是存在的文件名,-d匹配的存在的路径名。这段代码在进行404重定向之前,会判断你的文件名以及路径名是否存在。你还可以在404页面上加一个?url=$1参数: 
rewriterule ^/?(.*)$ /404.php?url=$1 [l] 
这样,你的404页面就可以做一些其他的事情,例如默认信心,发一个邮件提醒,加一个搜索,等等。
6.重命名目录 
如果你想在网站上重命名目录,试试这个: 
rewriterule ^/?old_directory/([a-z/.]+)$ new_directory/$1 [r=301,l] 
在规则里我添加了一个“.”(注意不是代表得所有字符,前面有转义符)来匹配文件的后缀名。 
7.将.html后缀名转换成.php 
前提是.html文件能继续访问的情况下,更新你的网站链接。 
rewriterule ^/?([a-z/]+)\.html$ $1.php [l] 
这不是一个网页重定向,所以访问者是不可见的。让他作为一个永久重定向(可见的),将flag修改[r=301,l]。 
8.创建无文件后缀名链接 
如果你想使你的php网站的链接更加简洁易记-或者隐藏文件的后缀名,试试这个: 
rewriterule ^/?([a-z]+)$ $1.php [l] 
如果网站混有php以及html文件,你可以用rewritecond先判断该后缀的文件是否存在,然后进行替换: 
rewritecond %{request_filename}.php -f 
rewriterule ^/?([a-za-z0-9]+)$ $1.php [l] 
rewritecond %{request_filename}.html -f 
rewriterule ^/?([a-za-z0-9]+)$ $1.html [l] 
如果文件是以.php为后缀,这条规则将被执行。
9.检查查询变量里的特定参数 
如果在url里面有一个特殊的参数,你可用rewritecond鉴别其是否存在: 
rewritecond %{query_string} !uniquekey= 
rewriterule ^/?script_that_requires_uniquekey\.php$ other_script.php [qsa,l] 
以上规则将检查{query_string}里面的uniquekey参数是否存在,如果{request_uri}值为script_that_requires_uniquekey,将会定向到新的url。 
10.删除查询变量 
apache的mod_rewrite模块会自动辨识查询变量,除非你做了以下改动: 
a).分配一个新的查询参数(你可以用[qsa,l]flag保存最初的查询变量) 
b).在文件名后面加一个“?”(比如index.php?)。符号“?”不会在浏览器的地址栏里显示。
11.用新的格式展示当前uri 
如果这就是我们当前正在运行的urls:/index.php?id=nnnn。我们非常希望将其更改成/nnnn并且让搜索引擎以新格式展现。首先,我们为了让搜索引擎更新成新的,得将旧的urls重定向到新的格式,但是,我们还得保证以前的index.php照样能够运行。是不是被我搞迷糊了? 
实现以上功能,诀窍就在于在查询变量中加了一个访问者看不到的标记符“marker”。我们只将查询变量中没有出现“marker”标记的链接进行重定向,然后将原有的链接替换成新的格式,并且通过[qsa]flag在已有的参数加一个“marker”标记。以下为实现的方式: 
rewritecond %{query_string} !marker 
rewritecond %{query_string} id=([-a-za-z0-9_+]+) 
rewriterule ^/?index\.php$ %1? [r=301,l] 
rewriterule ^/?([-a-za-z0-9_+]+)$ index.php?marker &id=$1 [l]
这里,原先的url:http://www.example.com/index.php?id=nnnn,不包含marker,所以被第一个规则永久重定向到http://www.example.com/nnnn,第二个规则将http://www.example.com/nnnn反定向到http://www.example.com/index.php?marker&id=nnnn,并且加了marker以及id=nnnn两个变量,最后mod_rewrite就开始进行处理过程。
第二次匹配,marker被匹配,所以忽略第一条规则,这里有一个“.”字符会出现在http://www.example.com/index.php?marker &id=nnnn中,所以第二条规则也会被忽略,这样我们就完成了。
注意,这个解决方案要求apache的一些扩展功能,所以如果你的网站放于在共享主机中会遇到很多障碍。
12.保证安全服务启用 
apache可以用两种方法辨别你是否开启了安全服务,分别引用{https}和{server_port}变量: 
rewritecond %{request_uri} ^secure_page\.php$ 
rewritecond %{https} !on 
rewriterule ^/?(secure_page\.php)$ https://www.example.com/$1 [r=301,l] 
以上规则测试{request_uri}值是否等于我们的安全页代码,并且{https}不等于on。如果这两个条件同时满足,请求将被重定向到安全服务uri.另外你可用{server_port}做同样的测试,443是常用的安全服务端口 
rewritecond %{request_uri} ^secure_page\.php$ 
rewritecond %{server_port} !^443$ 
rewriterule ^/?(secure_page\.php)$ https://www.example.com/$1 [r=301,l]
13.在特定的页面上强制执行安全服务 
遇到同一个服务器根目录下分别有一个安全服务域名和一个非安全服务域名,所以你就需要用rewritecond 判断安全服务端口是否占用,并且只将以下列表的页面要求为安全服务: 
rewritecond %{server_port} !^443$ 
rewriterule ^/?(page1|page2|page3|page4|page5)$ https://www.example.com/%1[r=301,l] 
以下是怎样将没有设置成安全服务的页面返回到80端口: 
rewritecond %{ server_port } ^443$ 
rewriterule !^/?(page6|page7|page8|page9)$http://www.example.com%{request_uri} [r=301,l]
  

本文讲解了RewriteCond和13个mod_rewrite应用举例Apache伪静态 的相关知识,更多相关内容请关注php中文网。

相关推荐:

了解正向代理与反向代理的区别

如何使用Apache 搭建虚拟主机

如何通过sh memcached 进程启动及监控

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
C# ASP.NET Core微服务架构与API网关实践
C# ASP.NET Core微服务架构与API网关实践

本专题围绕 C# 在现代后端架构中的微服务实践展开,系统讲解基于 ASP.NET Core 构建可扩展服务体系的核心方法。内容涵盖服务拆分策略、RESTful API 设计、服务间通信、API 网关统一入口管理以及服务治理机制。通过真实项目案例,帮助开发者掌握构建高可用微服务系统的关键技术,提高系统的可扩展性与维护效率。

16

2026.03.11

Go高并发任务调度与Goroutine池化实践
Go高并发任务调度与Goroutine池化实践

本专题围绕 Go 语言在高并发任务处理场景中的实践展开,系统讲解 Goroutine 调度模型、Channel 通信机制以及并发控制策略。内容包括任务队列设计、Goroutine 池化管理、资源限制控制以及并发任务的性能优化方法。通过实际案例演示,帮助开发者构建稳定高效的 Go 并发任务处理系统,提高系统在高负载环境下的处理能力与稳定性。

23

2026.03.10

Kotlin Android模块化架构与组件化开发实践
Kotlin Android模块化架构与组件化开发实践

本专题围绕 Kotlin 在 Android 应用开发中的架构实践展开,重点讲解模块化设计与组件化开发的实现思路。内容包括项目模块拆分策略、公共组件封装、依赖管理优化、路由通信机制以及大型项目的工程化管理方法。通过真实项目案例分析,帮助开发者构建结构清晰、易扩展且维护成本低的 Android 应用架构体系,提升团队协作效率与项目迭代速度。

75

2026.03.09

JavaScript浏览器渲染机制与前端性能优化实践
JavaScript浏览器渲染机制与前端性能优化实践

本专题围绕 JavaScript 在浏览器中的执行与渲染机制展开,系统讲解 DOM 构建、CSSOM 解析、重排与重绘原理,以及关键渲染路径优化方法。内容涵盖事件循环机制、异步任务调度、资源加载优化、代码拆分与懒加载等性能优化策略。通过真实前端项目案例,帮助开发者理解浏览器底层工作原理,并掌握提升网页加载速度与交互体验的实用技巧。

95

2026.03.06

Rust内存安全机制与所有权模型深度实践
Rust内存安全机制与所有权模型深度实践

本专题围绕 Rust 语言核心特性展开,深入讲解所有权机制、借用规则、生命周期管理以及智能指针等关键概念。通过系统级开发案例,分析内存安全保障原理与零成本抽象优势,并结合并发场景讲解 Send 与 Sync 特性实现机制。帮助开发者真正理解 Rust 的设计哲学,掌握在高性能与安全性并重场景中的工程实践能力。

218

2026.03.05

PHP高性能API设计与Laravel服务架构实践
PHP高性能API设计与Laravel服务架构实践

本专题围绕 PHP 在现代 Web 后端开发中的高性能实践展开,重点讲解基于 Laravel 框架构建可扩展 API 服务的核心方法。内容涵盖路由与中间件机制、服务容器与依赖注入、接口版本管理、缓存策略设计以及队列异步处理方案。同时结合高并发场景,深入分析性能瓶颈定位与优化思路,帮助开发者构建稳定、高效、易维护的 PHP 后端服务体系。

420

2026.03.04

AI安装教程大全
AI安装教程大全

2026最全AI工具安装教程专题:包含各版本AI绘图、AI视频、智能办公软件的本地化部署手册。全篇零基础友好,附带最新模型下载地址、一键安装脚本及常见报错修复方案。每日更新,收藏这一篇就够了,让AI安装不再报错!

168

2026.03.04

Swift iOS架构设计与MVVM模式实战
Swift iOS架构设计与MVVM模式实战

本专题聚焦 Swift 在 iOS 应用架构设计中的实践,系统讲解 MVVM 模式的核心思想、数据绑定机制、模块拆分策略以及组件化开发方法。内容涵盖网络层封装、状态管理、依赖注入与性能优化技巧。通过完整项目案例,帮助开发者构建结构清晰、可维护性强的 iOS 应用架构体系。

222

2026.03.03

C++高性能网络编程与Reactor模型实践
C++高性能网络编程与Reactor模型实践

本专题围绕 C++ 在高性能网络服务开发中的应用展开,深入讲解 Socket 编程、多路复用机制、Reactor 模型设计原理以及线程池协作策略。内容涵盖 epoll 实现机制、内存管理优化、连接管理策略与高并发场景下的性能调优方法。通过构建高并发网络服务器实战案例,帮助开发者掌握 C++ 在底层系统与网络通信领域的核心技术。

33

2026.03.03

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号