跳到主要内容

.htaccess 教程

在本教程中,您将了解 .htaccess 文件及其强大功能,帮助您优化和管理网站。Bluehost 支持 .htaccess 文件;但作为客户,您需要对该文件的内容及其对网站的影响负责。

  • 创建 .htaccess 文件
  • 编辑 .htaccess 文件
  • 替代索引文件
  • 自定义错误页面
  • 禁止目录索引显示
  • 拒绝/允许特定 IP 地址
  • 重定向
  • 密码保护
  • 修复 ExecCGI
  • 重启 Apache

创建 .htaccess 文件

您可以在本地计算机或服务器上创建 .htaccess 文件。

在您的计算机上

Windows: 使用记事本,将文件保存为 .htaccess。Mac OS X: 使用 TextEdit,将文件保存为“.htaccess”。
注意: 如果您将文件保存为 .htaccess,文件将被隐藏,您无法在 Finder 中看到它。
使用您喜欢的 FTP 客户端,将文件上传到服务器。 .htaccess 文件需要放在您的网站所在的文件夹中,通常是 public_html 文件夹。有关详细信息,请参阅文件管理器 - 如何上传文件。

在服务器上

  1. 登录您的 Bluehost 账户管理面板。
    注意: 您必须将“example.com”替换为您的实际域名。
  1. 接着,点击 文件管理器 按钮,位于 文件 下方。
    Snapshot of the 'Files' section in cPanel, highlighting the 'File Manager' option.
  2. 寻找屏幕右上角的 设置 按钮。
    Toolbar in a file manager with search feature and settings icon indicated by a red arrow.
  3. 点击 首选项 弹出窗口,然后勾选 显示隐藏文件(点文件)
    Preferences window with options to show hidden files and set web root directory for 'example.com'
  4. 完成后点击 保存 按钮。
  5. 点击 文件 图标创建新文件,命名为 .htaccess。
    cPanel File Manager showing +File option to create a new file

编辑 .htaccess 文件

您可能因各种原因需要编辑 .htaccess 文件。本文介绍如何编辑该文件,但不涉及具体修改内容。(您可能需要查阅其他文章和资源以获取相关信息。)
编辑 .htaccess 文件的方法有多种:

  1. 在计算机上编辑文件,然后通过 FTP 上传到服务器。
  2. 使用 FTP 程序的 编辑模式,远程编辑文件。
  3. 使用 SSH 和文本编辑器编辑文件。
  4. 使用 cPanel 中的文件管理器编辑文件。

对大多数人来说,使用 cPanel 的文件管理器是编辑 .htaccess 文件最快捷、最简单的方法。本文介绍如何使用此方法编辑。请继续阅读后续章节了解一些常见的 .htaccess 编辑操作。

如何在 Bluehost cPanel 的文件管理器中编辑 .htaccess

在操作之前,建议您备份网站,以便出现问题时可以恢复到之前的版本。
编辑 .htaccess 文件,首先需要打开 文件管理器

  1. 登录您的 Bluehost 控制面板。
  2. 点击左侧菜单中的 托管 标签。
    Bluehost account manager hosting tab
  3. 接着,在 快速链接 下点击 文件管理器 按钮。
    Snapshot of Quick Links, selecting File Manager option
  4. 寻找屏幕右上角的 设置 按钮。
  5. 点击 首选项 弹出窗口,然后勾选 显示隐藏文件(点文件)
    Preferences window with options to show hidden files and set web root directory for 'example.com'
  6. 滚动查找列表中的 .htaccess 文件。
  7. 右键点击该文件,然后从菜单中选择 编辑
    .htaccess file option, selecting Edit
  8. 可能会弹出编码选择对话框,直接点击 编辑 按钮继续。编辑器将在新窗口打开。
  9. 根据需要编辑文件,然后点击 保存更改 按钮。
  10. 测试您的网站,确保达到预期效果。如果没有,修正错误或恢复到之前版本,直到网站正常运行。

替代索引文件

您不一定总是使用 index.htm 或 index.html 作为目录的索引文件;例如,如果您网站使用 PHP 文件,您可能希望 index.php 作为目录的索引文件。您也不局限于“index”文件,使用 .htaccess,您可以将 foofoo.blah 设置为索引文件!
替代索引文件以列表形式输入。服务器会从左到右依次检查每个文件是否存在;如果都不存在,则显示目录列表(当然,前提是您没有关闭该功能)。

DirectoryIndex index.php index.php3 messagebrd.pl index.html index.htm

自定义错误页面

您可以自定义个人错误页面(例如,文件未找到时),而不是使用 Bluehost 的错误页面或没有错误页面。这样您的网站看起来更专业。
只要知道错误代码(如 404 表示页面未找到),即可通过在 .htaccess 文件中添加以下内容使用自定义错误页面:

ErrorDocument errornumber /file.html

例如,如果我在网站根目录有文件 notfound.html,想用它作为 404 错误页面,可以写:

ErrorDocument 404 /notfound.html

如果错误页面不在网站根目录,可以填写文件路径:

ErrorDocument 500 /errorpages/500.html

以下是一些常见错误代码:

401 - 需要授权
400 - 错误请求
403 - 禁止访问
500 - 服务器内部错误
404 - 页面不存在

禁止目录索引显示

有时,目录中没有索引文件,这意味着如果有人在浏览器中输入目录名称,将显示该目录下所有文件的完整列表。这可能会带来安全风险。
为防止这种情况(而不必创建大量新的“index”文件),您可以在 .htaccess 文件中输入命令,阻止目录列表显示:

# 禁用目录浏览

Options ExecCGI Includes IncludesNOEXEC SymLinksIfOwnerMatch -Indexes

# 启用目录浏览
Options All +Indexes

拒绝/允许特定 IP 地址

允许只有特定 IP 地址的人访问您的网站,例如,允许使用特定网络的用户访问某个目录。您也可以禁止某些 IP 地址,例如阻止破坏性用户访问您的留言板。仅当您知道要禁止的 IP 地址时,此方法才有效。
请注意,大多数 ISP 使用动态 IP 地址,因此这并非限制/授权访问的最佳方法。

阻止 IP 地址

# 拒绝列表

order allow,deny
deny from 123.123.123.123 # 指定单个地址
deny from 123.123.123.123/30 # 指定子网范围
deny from 123.123.* # 指定 IP 地址通配符
allow from all

仅允许特定 IP 地址

# 允许列表

order deny,allow
allow from 123.123.123.123 # 指定单个地址
allow from 123.123.123.123/30 # 指定子网范围
allow from 123.123.* # 指定 IP 地址通配符
deny from all

注意: 这仍然允许脚本使用目录中的文件。

重定向

cPanel 中有工具可以帮您创建重定向。请参阅如何创建重定向。

从特定文件重定向到新文件

示例:

Redirect /redirect_from.html http://www.newsite.com/folder/redirect_to.html

上述示例中,根目录下名为 redirect_example.html 的文件被重定向到 URL http://www.newsite.com/folder/redirect_example.html。
如果旧文件在子目录中,可以使用:

/subdirectory/redirect_from.html

通配符重定向 / 从一个文件夹重定向到新文件夹

Redirect /redirect_from http://www.newsite.com/redirect_to

现在,任何对 /redirect_from 目录下内容的请求都会被重定向到新站点,并附加 URL 中的额外信息,例如,如果有人输入:

http://www.example.com/redirect_from/images/image.gif

他们将被重定向到:

http://www.newsite.com/redirect_to/images/image.gif

Joomla 中的重定向(URL 重写)

要启用 Joomla 中的 URL 重写,您需要将以下代码复制粘贴到您的 .htaccess 文件中。

# 出于安全原因,Option FollowSymlinks 不能被覆盖。
#Options +FollowSymLinks
Options +SymLinksIfOwnerMatch

Mod_Rewrite

Mod Rewrite 允许您更改访问域名或特定地址时显示的 URL。只需将代码添加到您的 .htaccess 文件(通常在 public_html 目录下)。
请记住,我们不提供代码支持,也不保证您的代码能正常工作。有些代码可以组合使用,有些则不行。

示例

# 指定默认主页(索引页)
DirectoryIndex home.html
# 只允许指定 IP 访问网站
deny from all
allow from 64.95.219.140
allow from 210.23.45.67
# 将 olddomain.com 的所有页面重定向到 newdomain.com
Options +FollowSymLinks
RewriteEngine on
RewriteCond %{HTTP_HOST} ^www.olddomain.com$ [OR]
RewriteCond %{HTTP_HOST} ^olddomain.com$
RewriteRule ^(.*)$ http://www.newdomain.com/$1 [R=301,L]
# 防止加载子文件夹。此规则放在主域名的 htaccess 中
RewriteCond %{HTTP_HOST} ^primary.com$ [OR]
RewriteCond %{HTTP_HOST} ^www.primary.com$
RewriteRule ^addon.com/?(.*)$ "http://www.addon.com/$1" [R=301,L]
# 防止加载子域名。
# 此规则放在主域名的 htaccess 中
RewriteCond %{HTTP_HOST} ^subname.primary.com$ [OR]
RewriteCond %{HTTP_HOST} ^www.subname.primary.com$
RewriteRule ^(.*)$ "http://www.addon.com/$1" [R=301,L]
# 域名中永远不使用 www
# 将 'example.com' 替换为您的域名
RewriteEngine on
RewriteCond %{HTTP_HOST} ^www\.(([a-z0-9_]+\.)?example\.com)$ [NC]
RewriteRule .? http://%1%{REQUEST_URI} [R=301,L]
# 域名中始终使用 www
# 将 'example.com' 替换为您的域名
RewriteEngine on
RewriteCond %{HTTP_HOST} ^([a-z.]+)?example\.com$ [NC]
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule .? http://www.%1example.com%{REQUEST_URI} [R=301,L]
# 设置默认主页目录(始终加载此子文件夹)
# 将 'folder' 替换为您的子文件夹名称
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^$ /folder/ [R=301,L]
</IfModule>
# 重命名目录并强制访问新名称
# 将 'old' 替换为旧文件夹名
# 将 'new' 替换为新文件夹名
RewriteEngine on
RewriteRule ^/?old([a-z/.]*)$ /new$1 [R=301,L]
# 访问安全连接时始终使用 https
# 将 'www.example.com' 替换为您的域名
# (与您的 SSL 证书上的名称一致)
RewriteEngine On
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://www.example.com/$1 [R=301,L]
# 阻止来自多个来源的流量
RewriteEngine on
Options +FollowSymlinks
RewriteCond %{HTTP_REFERER} badsite.com [NC,OR]
RewriteCond %{HTTP_REFERER} badforum.com [NC,OR]
RewriteCond %{HTTP_REFERER} badsearchengine.com [NC]
RewriteRule .* - [F]
# 不允许调用这些文件类型
RewriteEngine on
RewriteRule .*.(jpg|jpeg|gif|png|bmp|exe|swf)$ - [F,NC]

dot-htaccess 编码指南:

  • javascriptkit.com
  • apache.org
  • modrewrite.com

密码保护

.htaccess 的众多用途之一是可靠地保护网站上的密码目录。
注意: 如果您想使用 cPanel 工具为文件夹设置密码保护,请参阅我们的文章:为网站文件夹设置密码保护。

.htaccess 文件

使用 .htaccess 为目录添加密码保护分两个阶段。第一步是在您想保护的目录中的 .htaccess 文件添加相应代码。该目录及其以下所有内容都将受密码保护:

AuthName "Section Name"
AuthType Basic
AuthUserFile /home/username/.htpasswd
Require valid-user

其中有几个部分需要您根据网站情况修改。您必须将 Section Name 替换为您保护部分的名称(例如,“会员区”)。
/ home/username/.htpasswd 应替换为 .htpasswd 文件在服务器上的完整路径(稍后会详细说明)。如果您不知道网站空间的完整路径,请查看 Bluehost cPanel 左侧的“统计”栏目。

说明: 虽然示例中有时使用 .htpasswds,但通常标准文件名为 .htpasswd,建议统一使用 .htpasswd 以避免混淆。

.htpasswd 文件

密码保护目录比其他 .htaccess 功能稍复杂,因为您还需要创建一个文件,存储允许访问的用户名和密码。该文件默认名为 .htpasswd。由于密码是加密的,该文件可以放在网站的任何位置,但建议放在网站根目录之外(如您的主目录),以防止被网络访问。

输入用户名和密码

创建好 .htpasswd 文件(可用普通文本编辑器完成)后,输入允许访问的用户名和密码,格式如下:

username:password

密码格式为加密格式。推荐使用 KxS 网站的模拟器,该模拟器允许您输入用户名和密码,并生成正确格式的输出。
若有多个用户,只需在 .htpasswd 文件中按相同格式添加多行即可。

访问网站

当您尝试访问受 .htaccess 保护的网站时,浏览器会弹出标准的用户名/密码对话框。或者,您也可以在 URL 中以未加密形式发送用户名和密码,格式如下:

http://username:password@www.website.com/directory/

修复 ExecCGI

在文件管理器中打开位于 public_html/addondomain/ 目录下的 .htaccess 文件,输入以下内容:

Options ExecCGI

点击屏幕底部的 保存 按钮,完成操作!

重启 Apache

您无需重启 Apache,之后只需“强制刷新”网页即可看到更改效果。浏览您的网站,打开应受影响的页面,然后按 Ctrl + F5 刷新全部内容。(部分电脑需先开启 F 锁才能使用 F5。)现在,您的新 .htaccess 代码应已生效。
或者,您可以清除浏览器缓存,关闭浏览器,重新打开浏览器,再次尝试访问网页。
Safari 用户: Safari 3 及以下版本需使用 cmd + R 快捷键刷新。Safari 4 及以上版本需按住 shift 键并点击地址栏旁的刷新图标。