目录
1. 强制 HTTPS 跳转
2. 去掉文件扩展名(如 .html 或 .php)
3. 强制带 www 或不带 www 的域名
4. 自定义伪静态 URL(如文章 ID 显示为标题)
5. 防止图片盗链
6. 多条件组合:仅对特定用户代理重定向
7. 简单的 URL 重定向(旧页面 → 新页面)
8. 开启“漂亮 URL”(Pretty URLs)支持(如 PHP 框架常用)
小贴士
首页 运维 Apache Apache重写规则示例

Apache重写规则示例

Jul 31, 2025 am 07:34 AM

强制HTTPS跳转:通过RewriteCond判断非HTTPS请求并使用R=301永久重定向至HTTPS;2. 去掉文件扩展名:利用!-f和!-d条件将如/about重写为/about.php;3. 强制带www或不带www:通过HTTP_HOST匹配并301跳转以统一域名格式;4. 自定义伪静态URL:将/article/123/title解析为/article.php?id=123;5. 防止图片盗链:检查Referer头,非本站来源则返回提示图或403;6. 多条件组合重定向:通过HTTP_USER_AGENT匹配恶意爬虫并跳转至封锁页;7. 简单URL重定向:将旧页面301跳转到新页面以保持SEO权重;8. 开启漂亮URL:将所有非文件非目录请求指向index.php以支持前端控制器模式;所有规则需在RewriteEngine On开启后生效,建议逐条测试并备份配置以防止错误导致服务不可用。

Apache rewrite rule examples

Apache RewriteRule 是 Apache 的 mod_rewrite 模块提供的强大功能,用于重写 URL 请求。它常用于实现 SEO 友好链接、网站跳转、防止盗链、HTTPS 强制跳转等场景。以下是几个常见且实用的 RewriteRule 示例,适用于 .htaccess 文件或 Apache 虚拟主机配置中。

Apache rewrite rule examples

1. 强制 HTTPS 跳转

将所有 HTTP 请求重定向到 HTTPS:

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
  • RewriteCond %{HTTPS} off:判断当前是否为非 HTTPS。
  • R=301:返回 301 永久重定向。
  • L:表示这是最后一条规则,后续不再处理。

适用于需要全站启用 HTTPS 的场景。

Apache rewrite rule examples

2. 去掉文件扩展名(如 .html 或 .php)

隐藏 .php 扩展名,例如访问 /about 实际加载 /about.php

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([a-zA-Z0-9_-] )$ $1.php [L]
  • !-f!-d:确保请求的不是真实存在的文件或目录,避免冲突。
  • ^([a-zA-Z0-9_-] )$:匹配不含扩展名的 URL。
  • $1.php:内部重写到同名 .php 文件。

可以将 .php 替换为 .html,适用于静态页面。

Apache rewrite rule examples

3. 强制带 www 或不带 www 的域名

强制带 www:

RewriteEngine On
RewriteCond %{HTTP_HOST} ^example\.com$ [NC]
RewriteRule ^(.*)$ https://www.example.com/$1 [L,R=301]

强制不带 www(更常见):

RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.example\.com$ [NC]
RewriteRule ^(.*)$ https://example.com/$1 [L,R=301]
  • [NC]:忽略大小写。
  • 使用 301 跳转有利于 SEO 统一域名权重。

4. 自定义伪静态 URL(如文章 ID 显示为标题)

/article/123/my-great-article 重写为 /article.php?id=123

RewriteEngine On
RewriteRule ^article/([0-9] )/([a-zA-Z0-9_-] )$ /article.php?id=$1 [L]
  • 第一个括号捕获文章 ID。
  • 第二个括号捕获标题(仅用于 SEO,可忽略)。
  • 实际处理仍使用 id 参数。

这种方式让 URL 更友好,同时后端逻辑不变。


5. 防止图片盗链

阻止其他网站直接引用你的图片资源:

RewriteEngine On
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^https://(www\.)?yourdomain\.com/.*$ [NC]
RewriteRule \.(jpg|jpeg|png|gif|webp)$ https://yourdomain.com/nohotlinking.jpg [R,L]
  • 检查 Referer 头是否为空(允许直接访问)或来自你的域名。
  • 匹配常见图片格式,盗链时返回提示图片。

可替换为返回 403 状态码:

RewriteRule \.(jpg|jpeg|png|gif)$ - [F,L]

6. 多条件组合:仅对特定用户代理重定向

例如:阻止某些爬虫或重定向移动端用户:

RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} ^BadBot [NC,OR]
RewriteCond %{HTTP_USER_AGENT} SpamBot [NC]
RewriteRule ^.*$ https://example.com/blocked.html [R,L]
  • OR 表示“或”关系,下一条条件也满足才触发。
  • 用于屏蔽恶意爬虫或测试机器人。

7. 简单的 URL 重定向(旧页面 → 新页面)

RewriteRule ^old-page\.html$ /new-page.html [R=301,L]
  • 适合网站改版后保持旧链接可用。
  • 使用 R=301 告诉搜索引擎已永久迁移。

8. 开启“漂亮 URL”(Pretty URLs)支持(如 PHP 框架常用)

例如 Laravel、Symfony 等框架需要将所有请求指向 index.php

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [QSA,L]
  • QSA:保留原始查询参数(如 ?id=1)。
  • 适用于前端控制器(Front Controller)模式。

小贴士

  • 开启 RewriteEngine:所有规则前必须有 RewriteEngine On
  • 测试顺序:规则按顺序执行,注意 L 标志避免后续干扰。
  • 调试技巧:可用 RewriteLog(旧版)或通过 404 日志 curl -I 测试跳转。
  • 作用域.htaccess 中路径不带前导 /,虚拟主机中可能需要调整。

基本上就这些常见场景。实际使用时建议逐条测试,避免误伤正常请求。RewriteRule 功能强大,但正则写错可能导致整个网站无法访问,修改前最好备份配置。

以上是Apache重写规则示例的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

热门话题

PHP教程
1596
276
如何在Apache上安装让我们加密SSL证书? 如何在Apache上安装让我们加密SSL证书? Aug 04, 2025 am 09:47 AM

安装Certbot及其Apache插件;2.运行Certbot获取证书并配置域名;3.可选配置HTTP到HTTPS的自动重定向;4.设置自动续期并通过dry-run测试;5.验证安装并确保Apache正常重载配置,证书成功部署后将自动管理续期,整个过程完成后即可实现安全的HTTPS访问。

Apache性能调整最佳实践 Apache性能调整最佳实践 Aug 05, 2025 am 06:59 AM

UseEventMPMforhigh-concurrencyworkloads,especiallywithPHP-FPM,orPreforkonlyifrequiredbynon-thread-safemodules.2.EnableKeepAlivewithMaxKeepAliveRequestssetto100andKeepAliveTimeoutbetween2–5secondstobalanceconnectionreuseandresourceusage.3.ConfigureEve

如何将Apache升级到最新版本? 如何将Apache升级到最新版本? Aug 04, 2025 pm 03:18 PM

CheckCurrentApacheverSionushttpd-Vorapache2-vandverifyservicStatUsviaStl.2.ondebian/ubuntu,upgradeusingsingsingsudoapdat eandsudoaptinstallapache2,optionallyaddingtheppa:使用ududodnfupdatadadagsud

如何在Apache中配置keepalive? 如何在Apache中配置keepalive? Aug 03, 2025 am 07:06 AM

KeepAliveOn启用持久连接;2.MaxKeepAliveRequests100设置每个连接最大请求数;3.KeepAliveTimeout5设置等待后续请求的超时时间,配置后重启Apache并使用curl或浏览器开发者工具验证KeepAlive是否生效,以优化服务器性能。

如何在Apache中设置自定义404错误页面? 如何在Apache中设置自定义404错误页面? Jul 27, 2025 am 02:20 AM

要设置自定义404错误页面,需先创建页面文件并在Apache中配置路径。1.创建自定义404页面,如将404.html保存至网站根目录;2.在网站根目录的.htaccess文件中添加ErrorDocument404/404.html,确保AllowOverride已启用;3.若使用VPS或独立服务器,可在虚拟主机配置文件(如000-default.conf)中添加ErrorDocument404/404.html,并重启Apache服务;4.通过访问不存在的URL测试自定义页面是否生效。配置时应

如何在Apache中配置虚拟主机? 如何在Apache中配置虚拟主机? Aug 01, 2025 am 04:16 AM

创建网站目录并添加测试页面;2.在/etc/apache2/sites-available/下创建虚拟主机配置文件,设置ServerName、DocumentRoot等;3.使用a2ensite启用站点,禁用默认站点,测试配置后重载Apache;4.本地测试时在/etc/hosts中添加域名指向127.0.0.1;完成以上步骤后,访问example.com即可看到网站内容,虚拟主机配置成功。

Apache配置文件在哪里? Apache配置文件在哪里? Aug 08, 2025 am 01:20 AM

Ondebian/ubuntu,themainapacheconfigurationfileis/etc/apache2/apache2.conf,withAdditionalConfigurationsin/etc/apache2/stites-av ailable/and/etc/apache2/conf-abailable/.2.onrhel/centos/fedora,itistyply/etc/etc/httpd/conf/conf/httpd.conf,withextrafilesin/etc/h

如何解决apache不能将libphp.so加载到服务器中 如何解决apache不能将libphp.so加载到服务器中 Aug 08, 2025 am 06:07 AM

First,verifythelibphp.sofileexistsusingfindorlocatecommands;ifmissing,reinstallPHPwithApachesupportviapackagemanager.2.CheckApacheconfigurationfilesforcorrectLoadModuledirectivepathandremoveduplicates.3.EnsureApacheandPHPversionsandarchitecturesmatch

See all articles