Apache mod_rewrite 是 Apache HTTP Server 中的一个强大模块,它允许你使用规则来修改请求的 URL,从而实现 URL 重写、隐藏真实路径、创建友好的 URL 等功能。以下将详细介绍 mod_rewrite 的配置和使用方法,并通过实际案例进行解析。
1. 检测 mod_rewrite 是否启用
在开始配置之前,首先需要确认你的 Apache 服务器是否已经启用了 mod_rewrite 模块。
1.1 使用 phpinfo()
通过 PHP 提供的 phpinfo()
函数可以查看服务器环境配置,包括已加载的 Apache 模块。
<?php
phpinfo();
?>
在浏览器中访问此 PHP 文件,找到 “Loaded Modules” 部分,查看是否包含 “mod_rewrite”。
1.2 编辑 httpd.conf 文件
如果没有找到 “mod_rewrite”,则需要手动启用该模块。
- 打开 Apache 配置文件
httpd.conf
。 - 查找
LoadModule
指令,找到rewritemodule
相关的配置。 - 将
#LoadModule rewritemodule modules/modrewrite.so
前面的#
号去掉。
LoadModule rewritemodule modules/modrewrite.so
- 重启 Apache 服务器。
2. 配置 .htaccess 文件
为了让 Apache 支持目录级别的配置,需要修改 httpd.conf
文件,并创建 .htaccess
文件。
2.1 修改 httpd.conf 文件
- 打开
httpd.conf
文件。 - 找到
<Directory />
段落。 - 将
AllowOverride None
修改为AllowOverride All
。
<Directory />
Options FollowSymLinks
AllowOverride All
</Directory>
- 重启 Apache 服务器。
2.2 创建 .htaccess 文件
在需要配置 URL 重写的目录下创建 .htaccess
文件。
RewriteEngine On
3. 编写 rewrite 规则
3.1 RewriteEngine
启用 rewrite 引擎。
RewriteEngine On
3.2 RewriteRule
定义 URL 重写规则。
RewriteRule ^oldpath/$ newpath/ [L]
^oldpath/$
:匹配以oldpath/
开头的路径。newpath/
:重写后的路径。[L]
:停止进一步处理。
3.3 RewriteCond
定义 rewrite 规则的条件。
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
!-f
:文件不存在。!-d
:目录不存在。
4. 实战配置实例
4.1 实例 1:将动态 URL 转换为静态 URL
RewriteEngine On
RewriteRule ^product/([a-zA-Z0-9]+)/$ product.php?id=$1 [L]
这个规则将 /product/12345/
转换为 /product.php?id=12345
。
4.2 实例 2:隐藏 .php 后缀
RewriteEngine On
RewriteRule ^(.*)\.html$ $1.php [L]
这个规则将 .html
文件转换为 .php
文件,例如 /index.html
转换为 /index.php
。
5. 总结
通过以上介绍,相信你已经对 Apache mod_rewrite 有了一定的了解。在实际应用中,可以根据需求编写相应的 rewrite 规则,实现 URL 重写、隐藏真实路径等功能。