如何配置 .htaccess 重定向

在本教程中,我们将讨论 Apache .htaccess 文件以及可以对其进行修改和配置以满足您的特定需求的多种方式。 我们将回顾如何配置 .htaccess 重定向、重写和添加其他自定义项。

假设您决定更改域名或在您的网站上有一个网址,您希望将其重定向到完全不同的位置。 使用 .htaccess 重定向,您可以自动将访问者发送到新页面或站点!

这 Apache 软件提供称为超文本访问或 .htaccess 文件的目录级配置。 此隐藏文件通常位于您网站的 public_html 文件夹中。 要修改它,请通过 SSH 连接到您的服务器帐户并使用您喜欢的命令行文本编辑器修改文件。 我们也可以自己创建文件并使用 FTP/SFTP 或 SCP 将其上传到服务器。 此外,大多数控制面板允许我们使用本机文件管理器修改 .htaccess 文件。

注意:您应该始终在修改重要文件之前对其进行备份。 不要删除现有的 .htaccess 文件,除非它是空的或者您确定可以这样做。

您网站的 .htaccess 文件可能已经包含需要保留的重要设置。 如果您的 .htaccess 文件具有现有设置,则需要将新代码添加到已有设置中。

如果您的站点是为您构建的,并且您对站点代码并不完全熟悉,那么在添加新的 .htaccess 设置时,您可能需要寻求设计人员或开发人员的帮助。

简单重定向

重定向单个页面

网址 重定向 告诉服务器它将将此流量发送到另一个目的地。 要永久重定向域流量,请使用 301. 对于临时重定向,请使用 302. 以下条目将任何尝试访问 test.com/old.html 的访问者发送到 test.com/new.html。

Redirect 301 /old.html https://www.test.com/new.html

重定向整个网站

当我们想在保留旧域名的同时更改我们的域名,最好的选择之一是从旧域名的根目录设置一个简单的 301 重定向(/) 到新的。

Redirect 301 / https://www.test.com/

简单的重写

重写 (mod_rewrite) 类似于重定向 (mod_alias)。 它们将目标 URL 或 URL 类重新指向另一个 URL。 但是,在大多数情况下,最好使用 mod_alias 指令,因为它更简单并且需要的配置更少。

我们应该将它的使用限制在 .htaccess 文件中已经存在其他重写规则的情况下。 当存在 Redirect 规则和 RewriteRule 指令时,RewriteRule 指令具有高于 Redirect 规则的层次优先级,无论配置文件中出现的顺序如何。 有几个用例可以实现 RewriteRule 指令。

将站点地址从 WWW 重写为非 WWW

要自动将输入 https://www.test.com 的访问者重定向到 https://test.com 并从网址中删除 www 部分,请使用以下命令。

Options +FollowSymLinks
RewriteEngine on
RewriteCond %{HTTP_HOST} .
RewriteCond %{HTTP_HOST} !^test.com
RewriteRule (.*) https://test.com/$1 [R=301,L]

将站点地址从非 WWW 重写为 WWW

另一方面,如果我们希望将访问者从 https://test.com 发送到 https://www.test.com,我们可以使用以下规则。

Options +FollowSymLinks
RewriteEngine on
RewriteCond %{HTTP_HOST} ^test.com [NC]
RewriteRule ^(.*)$ https://www.test.com/$1 [L,R=301]

在不更改 URL 的情况下重写站点地址

这会将特定 URL 重定向到外部域,而访问者不会意识到重定向,因为 URL 在浏览器的地址栏中将保持不变。

RewriteCond %{REQUEST_URI} ^/any_url/
RewriteRule ^(.*)$ https://external_domain.com/any_url/ [P]

在不更改 URL 的情况下重写页面

如果我们重命名或移动了页面,则此重定向特别方便。 访问旧页面的客户将在不知道更改的情况下被发送到新页面,因为他们浏览器中的地址栏将保持不变。

RewriteEngine  on
RewriteRule    "^/my_old_page.html$"  "/new_page.html" [PT]

重写以强制 HTTPS 连接

所有连接都将使用此规则映射到安全端口 (443),因此即使是直接 HTTP 请求也不会加载不安全的连接。

RewriteEngine On
RewriteCond %{SERVER_PORT} !^443$
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

重写不带扩展名的文件名

我们可以将任何对文件类型的请求重定向到同一个文件而不显示扩展名。 您可以一次包含多个文件扩展名,如下所示 example,我们在其中重定向 php、html 和 htm 文件。 预期的行为是从 https://BYNSS.com/random_page.php 转到 https://BYNSS.com/random_page。

RewriteEngine on
RewriteRule ^/?(.*).(php|html|htm)$ /$1 [R=301,L]

将子域重写为目录

该规则必须放在子域的根目录中。 它将对子域的任何请求重定向到我们选择的目录。 例如,如果我们想将 https://blog.BYNSS.com 重定向到 https://BYNSS.com/blog/,那么下面的规则将完美运行。

RewriteEngine on
RewriteRule ^(.*)$ https://BYNSS.com/blog/$1 [L,NE,R=301]

附加设置

自定义错误页面

错误页面通常很无聊、通用且模棱两可。 我们可以在我们的专用服务器上创建与我们网站的整体主题和风格相匹配的自定义页面,并且更容易被访问者理解。

ErrorDocument 401 https://any.domain.com/how_to_get_access.html
ErrorDocument 403 default
ErrorDocument 404 /404.html
ErrorDocument 500 "This is a funny error message."
ErrorDocument 500 /custom_file.html

这些重定向可以在 .htaccess 文件的顶部进行配置。 如上面的示例所示,它们遵循以下模式:

  • ErrorDocument 指令。
  • 用于重定向的错误代码(401、404 等)。
  • 要执行的动作。 它可以是访问者浏览器中显示的文本、本地或外部 URL 或文件(如 404.html)。

注意:特殊词“default”用于设置Web服务器的默认错误页面。

受密码保护的内容

有一种简单的方法可以通过 .htaccess 对特定内容进行密码保护。 我们只需要将以下代码添加到我们要保护的目录中的.htaccess 文件中。

AuthType Basic
AuthName "Protected"
AuthUserFile "/home/myuser/.htpasswds/passwd"
require valid-user

我们需要确保引用 .htpasswds 目录的正确路径。 最后一步是将用户和密码添加到 .htpasswds 中的 passwd 文件。 添加用户的正确术语是 user:password。

你可以 生成密码 在此处或从命令行(使用基于 MD5 的密码算法)。

$ openssl passwd -1
Password: mypass
Verifying - Password: mypass
Password generated: $1$UyoTN20N$WeWXiTlJE3iivdK9ToFea.
$ cat /home/myuser/.htpasswds/passwd
my_valid_user:$1$UyoTN20N$WeWXiTlJE3iivdK9ToFea.

生成安全密码的另一种方法是使用 pwgen 程序. pwgen 程序使用标志来生成设计为尽可能安全的密码。 要安装它,请在您的 VPS 服务器上运行以下命令之一或 Cloud 专用服务器。

#DEBIAN/UBUNTU
apt-get install -y pwgen
#FEDORA/RHEL
dnf install -y pwgen
#CENTOS
yum install -y pwgen
pwgen -synBcN1 24
"#wi>d;fhsK{Ky^%MxETmf9u

如果您担心盗链或想减少带宽使用,请尝试测试此选项以消除该问题。

Options +FollowSymlinks
RewriteEngine On
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^https://(www.)?domain.com/ [nc]
RewriteRule .*.(gif|jpg|png)$ https://domain.com/img/hotlink_no.png [nc]

结论

我们已经看到了 .htaccess 文件的几个实际用途,还有更多。 但是,我们应该指出,如果可能,最好使用主配置文件,因为它们提供更好的整体性能和安全性。 如果我们没有对服务器的 root 访问权限,则可以在管理面板中使用修改选项。 这通常是在每个目录的基础上设置 .htaccess 规则而没有太多麻烦的最佳方式,并且是一个非常灵活的工具,可以充分利用您的托管环境。

我们可以提供帮助!

我们以成为 Hosting™ 中最乐于助人的人而自豪!

我们的支持团队由经验丰富的 Linux 技术人员和才华横溢的系统管理员组成,他们对多种网络托管技术有着深入的了解,尤其是本文中讨论的技术。

如果您是完全托管的 VPS 服务器, Cloud 专用,VMWare 私有 Cloud私有父服务器, 托管 Cloud 服务器或专用服务器所有者,并且您需要有关 .htaccess 文件、设置重定向或任何其他问题的更多或更具体信息,您可以通过以下方式联系我们屡获殊荣的支持 在线聊天,或致电我们 1-800-580-4985. 如果您需要关于本文的更多信息,我们的技术支持人员将随时为您解答问题,每天 24 小时、每周 7 天、每年 365 天。 也可以通过我们的票务系统提供支持,请发送电子邮件至 [email protected]