网站管理员和Web开发人员必读的.htaccess入门指南( 二 )


推荐阅读《增强 WordPress 安全性的 15 个.htaccess 代码片段》
HTTP URL 重写规则
重写 URL 可能是.htaccess 文件最常用的一种功能 。WordPress 默认安装实际上可以直接从管理面板生成.htaccess 文件 。这样你就可以设置非 .php?p=1 结构的漂亮链接 。
让我们看一下如何将下划线更改为破折号的重写示例,因为它包含许多最重要的元素 。

Options +FollowSymLinks
RewriteEngine On
RewriteBase /
RewriteRule !.(html|php)$ - [S=4]
RewriteRule ^([^_]*)_([^_]*)_([^_]*)_([^_]*)_(.*)$ $1-$2-$3-$4-$5 [E=uscor:Yes]
RewriteRule ^([^_]*)_([^_]*)_([^_]*)_(.*)$ $1-$2-$3-$4 [E=uscor:Yes]
RewriteRule ^([^_]*)_([^_]*)_(.*)$ $1-$2-$3 [E=uscor:Yes]
【网站管理员和Web开发人员必读的.htaccess入门指南】RewriteRule ^([^_]*)_(.*)$ $1-$2 [E=uscor:Yes]
RewriteCond %{ENV:uscor} ^Yes$
RewriteRule (.*) http://d.com/$1 [R=301,L]
RewriteEngine 和 RewriteBase 通常都是默认这样设置 。你需要开启 RewriteEngine,才能正常工作 。网上有很多指南解释如何启用 mod_rewrite,您的托管服务提供商也可以提供帮助 。
请注意,语法遵循顶部的 RewriteRules 模式 。这些规则用于匹配作为 HTTP 请求重写的情况 。RewriteRule 会在符合情况的时候,将所有内容重定向到域名 d.com 。而 [R=301,L] 这样的结束括号称为重写标志,这些标志很重要,要讨论这个就非常复杂了,在此不展开了 。
mod_rewrite 语法肯定有点令人困惑,但不要被吓倒!在其他示例中,片段看起来容易得多 。
刚开始时,我推荐使用这个mod_rewrite 生成器,它可以帮助你使用真实的 URL 来生成代码示例 。这是一个很棒的工具,因为你可以在语法中查找各种项目,以查看它们在重写规则中的实际操作 。
RewriteRule ^dir/([0-9]+)/?$ /index.php?id=$1 [L]
不要试图一次性就能掌握这些规则 。我花了 3-4 个多月才真正开始了解如何使用 [0-9a-zA-Z]+ 和类似模式重写 URL 。继续练习,我保证你会有所收获的!
网站管理员的代码片段
我喜欢易于使用的片段,我想为网站管理员整理这些相关的.htaccess 代码 。这些想法中的每一个都可以很好地应用在你自己的.htaccess 文件以及其他代码块 。这些代码片段中的大多数都非常适合解决 Web 服务器环境中的某些问题 。
设置 DirectoryIndex
DirectoryIndex 命令通常用在第一行 。用来告诉 Apache 哪些文档最初应被视为“主”文档 。默认情况下,应该使用诸如 index.html、index.php、index.asp 和其他索引文件之类的项目 。通过使用我在下面复制的代码片段,你可以将此根文档制作成你喜欢的任何内容 。
DirectoryIndex index.html index.cgi index.php
文件的顺序应该按照重要性从高到低进行排列 。如果不存在 HTML 或 CGI 文件,那么将回退到 index.php 。你甚至可以将这些文件命名为 home.php 或 someotherfile.php,它们都是有效的语法 。
强制 WWW 或非 WWW 子域
如果你未指定 www.domain.com 或仅指定 domain.com,google 可以使用你网站域的两个版本 。根据我的经验,最好选择其中一种,并通过.htaccess 将其设置为唯一的选择 。然后谷歌才会只收录一个域名下的内容,不会导致两个版本的情况出现 。
# 强制到 www 子域名
RewriteEngine On
RewriteCond %{HTTP_HOST} ^domain.com [NC]
RewriteRule ^(.*)$ http://www.domain.com/$1 [L,R=301]
# 强制到根域名
RewriteEngine On
RewriteCond %{HTTP_HOST} !^domain.com$ [NC]
RewriteRule ^(.*)$ http://domain.com/$1 [L,R=301]
此代码段来自css-Tricks,提供了非常方便的解决方案 。你应该将域名更改为自己网站的,否则会有问题!但我非常支持强制执行这两个选项中的一个,并且在启动新网站后就需要设置好 。
强制下载媒体文件
另一个相当重要的片段允许强制下载某些媒体类型而不是在浏览器中显示 。我们都知道 PDF 文档和 MP3 音频文件应该是可以被下载的,但是如何确保它们可以下载?我在Htaccess 指南上发现了一篇类似的文章,其中概述了这段代码 。
AddType Application/octet-stream .zip .mp3 .mp4
你可以在此行的末尾添加更多文件类型 。使用八位字节流 MIME 类型的所有媒体格式都是可下载的 。通过.htaccess 强制执行此操作是确保人们无法在浏览器中查看这些文件的直接路径 。
自定义错误文档
我要添加的最后一篇文章是自定义错误文档的完整模板 。通常这些数字代码只能在服务器端看到 。但是有很多这些错误文档你应该熟悉 。比如 403/404 错误和 301 重定向 。


推荐阅读