.htaccess 完全入门:重定向、URL重写与访问限制的使用方法
经过之前的系列文章,我们已经牢固掌握了从 Apache 基础、安装、`httpd.conf` 配置,到使用虚拟主机运营多个网站的服务器管理基础。大家辛苦了!那么,终于来到了 Apache 篇的最终回。这次,我们将彻底解说在网站运营中堪称最强助力的“魔法文件”——.htaccess。
“想把特定页面跳转到新的 URL”、“想让 URL 变得简短美观”、“想给特定目录加上密码”……网站运营者的这些愿望,只需这一个文件就能实现。本文将从 .htaccess 的基本用法到实用配置示例,配上可直接复制粘贴的代码进行介绍。掌握本文后,您的网站管理必将变得更加自由和强大!
.htaccess 是什么?基础中的基础
.htaccess 是一个配置文件,用于在 Apache 运行的目录(文件夹)级别上,对服务器的行为进行精细控制。如果说 `httpd.conf` 是整个国家的法律,那么 `.htaccess` 就好比只在特定地区生效的地方法规。它最大的魅力在于,无需改动整个服务器的配置,就能按网站或文件夹应用独立的规则。
启用 .htaccess 的大前提
要使用 `.htaccess`,必须先允许在该目录中覆盖服务器配置。这需要在 `httpd.conf` 或虚拟主机配置文件(`httpd-vhosts.conf`)中,针对目标目录的<Directory>块进行设置。
请确认其中写有AllowOverride All这一行。如果写的是None,那么无论您在`.htaccess`中写什么都会被忽略,除非您将其更改为All并重启 Apache。
<Directory "/path/to/your/site">
# 需要将此设置设为 "All"
AllowOverride All
Require all granted
</Directory>
只要满足了这个设置,接下来只需用文本编辑器创建一个名为`.htaccess`的文件,并将其上传到您想应用规则的目录中,准备工作就完成了。
1. 重定向:将用户引导至其他页面
重定向功能用于在网站搬家或页面 URL 变更时,将对旧 URL 的访问自动转发到新的 URL。从 SEO 的角度来看,这一点非常重要。
重定向特定页面
这是最简单的重定向。它将对`old.html`的访问转发到新的`new.html`。“301”表示此转发是“永久性的”,这会告知搜索引擎该 URL 已永久移动。
Redirect 301 /old.html http://www.example.com/new.html
2. URL 重写:用 mod_rewrite 美化 URL
mod_rewrite是 Apache 中一个特别强大的模块,它可以在服务器后台重写(rewrite)URL。这样一来,用户看到的 URL 保持美观,而服务器内部则可以将其作为另一个 URL 来处理。
要使用 mod_rewrite,首先需要声明“现在开始使用重写引擎”。
RewriteEngine On
统一“带 www”与“不带 www”的域名
无论用户访问的是`example.com`还是`www.example.com`,都将其 URL 统一为`www.example.com`。为了不分散网站的权重,这在 SEO 上是非常有效的设置。
RewriteEngine On
# 如果访问的主机名是 'example.com'
RewriteCond %{HTTP_HOST} ^example\.com$
# 将整个 URL 永久重定向到 'www.example.com'
RewriteRule ^(.*)$ http://www.example.com/$1 [R=301,L]
强制启用 SSL:将 http 访问强制转为 https
从安全角度出发,如今网站强制启用 SSL(https 通信)已是必须。即使用户通过 http 访问,也会被自动转发到 https。
RewriteEngine On
# 如果不是通过 https 连接
RewriteCond %{HTTPS} off
# 将整个 URL 重定向到 https 的相同路径
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
将动态 URL 伪装成静态 URL
例如,将像`example.com/user.php?id=123`这样带参数的 URL,伪装成`example.com/user/123`这样简洁易懂的 URL。
RewriteEngine On
# 如果 URL 格式为 'user/数字'
RewriteRule ^user/([0-9]+)/?$ /user.php?id=$1 [L]
通过此设置,用户可以继续使用美观的 URL,而开发者则可以方便地通过参数处理数据。
3. 访问限制:为特定位置上锁
对于会员专区等只想允许特定人群访问的目录,可以设置密码认证(基本认证)。
基本认证的设置
基本认证需要两个文件:`.htaccess`和用于记录密码的`.htpasswd`。首先,在需要上锁的目录中放置包含以下内容的`.htaccess`文件。
AuthType Basic
# 在认证对话框中显示的消息
AuthName "Secret Area"
# 指定存放用户名和密码的文件的位置
AuthUserFile /path/to/.htpasswd
# 只允许通过认证的有效用户访问
Require valid-user
重要: 在`AuthUserFile`中指定的`.htpasswd`文件路径,必须是无法从 Web 访问的安全位置(文档根目录之外)。
创建 .htpasswd 文件
接下来,创建记录用户名和加密密码的`.htpasswd`文件。通常使用服务器命令行上的`htpasswd`命令来生成。
首次创建用户时 (使用 `-c` 选项新建文件):
htpasswd -c /path/to/.htpasswd user1
添加第二个及以后的用户时 (不使用 `-c`):
htpasswd /path/to/.htpasswd user2
执行命令后,系统会提示您输入密码。输入后,`.htpasswd`文件将在指定路径被创建或更新。
其他方便的设置示例
显示自定义错误页面
当发生“404 Not Found”等错误时,显示您自己设计的原创页面,而不是服务器单调的错误页面。
ErrorDocument 404 /errors/404.html
ErrorDocument 500 /errors/500.html
拒绝来自特定 IP 地址的访问
阻止恶意访问或来自特定 IP 地址的访问。
Require all granted
Require not ip 123.45.67.89
Require not ip 192.168.1.0/24
总结
辛苦了!至此,我们长达 4 篇的 Apache 系列文章就此完结。这一次,我们学习了如何通过`.htaccess`这个能够满足网站运营中各种“精细化”需求的工具,并了解了它的一些强大功能。
- 从简单的重定向到使用
mod_rewrite进行的高级URL重写。 - 通过基本认证实现便捷可靠的访问限制。
- 以及其他如错误页面、IP 限制等提升网站质量的各种设置。
`.htaccess`的世界非常深奥,本文介绍的仅仅是冰山一角。但是,只要应用今天学到的基础知识,根据您的创意就可以实现各种控制。请务必尝试各种设置,体验“成功运行”的乐趣,并感受它的便利。
通过了解 Web 服务器的幕后工作原理,您作为 Web 创作者的技能想必又精进了一层。祝愿您今后的 Web 制作生涯更加充满乐趣和创意!