📜  什么是PHP中的 .htaccess 文件?

📅  最后修改于: 2022-05-13 01:56:45.303000             🧑  作者: Mango

什么是PHP中的 .htaccess 文件?

.htaccess(超文本访问)文件是一个 Apache 分布式服务器配置文件。您可以使用 .htaccess 文件为特定目录设置服务器配置。此目录可以是您网站的根目录,也可以是创建 .htaccess 文件的另一个子目录,以便为该子目录启用额外功能。

您可以使用 .htaccess 文件来修改各种配置,从而对您的网站进行更改。这些更改包括授权、错误处理、特定 URL 的重定向、用户权限等。与任何其他 Apache 配置文件一样,.htaccess 文件是从上到下读取的。即,上述配置在以下配置之前执行。

.htaccess 文件的常见用途:

1. 更改默认起始页:假设您想在保持 index.html 文件不变的情况下将您的主页(例如 index.html)更改为其他一些 HTML 页面(例如 home.html),您可以通过以下方式更改默认着陆页在您的 .htaccess 文件中添加以下代码。

DirectoryIndex home.html

在配置文件中,也可以添加多个文件。在此示例中,首先,服务器将检查 index.html,如果找不到具有该名称的文件,则继续检查 home.htm,依此类推。

DirectoryIndex index.html home.html config.php

2.阻止特定IP或IP范围:您还可以阻止特定IP地址或IP地址范围访问您的网站。为此,您需要将这些行添加到您的 .htaccess 文件中:

  • 拒绝特定 IP:通过使用此模板,您可以阻止任何所需的 IP 地址

    Order Deny,Allow
    Deny from 192.206.221.140 
    (Here 192.206.221.140 is a specific IPv4 Address)
  • 拒绝 IP 列表:通过逐行列出 IP 地址,您可以阻止一组 IP 地址。

    Order Deny,Allow
    Deny from 185.120.120.120
    Deny from 192.190.190.190
  • 拒绝来自特定域的访问:假设您想拒绝从包含指向您网站的链接的特定域(例如 www.redirectingdomain.com)访问您的托管网站,在这种情况下,您可以在您的.htaccess 文件。这将在从 redirectingdomain.com 单击指向您网站的链接时显示 403 Forbidden 错误

    SetEnvIfNoCase Referer "redirectingdomain.com" bad_referer
    Order Allow,Deny
    Allow from ALL
    Deny from env=bad_referer
  • 阻止或允许 IP 地址范围:

    Order Allow,Deny
    Deny from 192.192.*.*
    Allow from all

    其中 * 用于整个八位字节

注意:要限制来自某些国家/地区的访问,您必须获取分配给该特定国家/地区的 IP 地址范围。需要注意的是,此方法并非 100% 有效,因为 IP 地址分配可能会更改并且 IP 地址范围可能会重叠。即便如此,此方法仍会阻止来自指定国家/地区的大部分流量。

3. 301 永久重定向: 301 是从网络服务器到您的网络浏览器的 HTTP 响应代码。 301 状态代码表示请求的资源已永久移动到新 URL。当页面不再相关或页面被删除时,301 重定向非常有用。您可以使用以下代码应用 301 重定向。

RewriteEngine on
RewriteCond %{HTTP_HOST} ^domain1.com [NC,OR]
RewriteCond %{HTTP_HOST} ^www.domain1.com [NC]
RewriteRule ^(.*)$ http://domain2.com/$1 [L,R=301,NC]

或者您可以简单地使用下面的代码

Redirect 301 / http://domain.com

4. WWW 到 non-WWW 和 non-WWW 到 WWW:由于搜索引擎认为“www”和“non-www”URL 是两个不同的东西,所以重定向来自非首选域的请求变得非常重要。让我们以“www.example.com”为例

  • 要使 301 从 www 重定向到非 www,您必须将以下代码添加到您的 .htaccess 文件中:

    RewriteEngine on
    RewriteCond %{HTTP_HOST} ^geeksforgeeks.com [NC]
    RewriteRule ^(.*)$ http://www.geeksforgeeks.com/$1 [L,R=301,NC]
  • 如果要进行从非 www 到 www 域的 301 重定向,请添加以下代码:

    RewriteEngine on
    RewriteCond %{HTTP_HOST} ^www.geeksforgeeks.com [NC]
    RewriteRule ^(.*)$ http://geeksforgeeks.com/$1 [L,R=301,NC]

5. 从 HTTP 重定向到 HTTPS:

为什么将流量从 HTTP 重定向到 HTTPS?

主要有两个原因,一是安全性,因为它确保用户数据从用户浏览器到网络服务器是加密的;二是 SEO(搜索引擎优化),因为 HTTPS 网站比 HTTP 网站具有更高的排名优势。如果要将网站的全部流量从 HTTP 传输到 HTTPS,则需要将以下内容添加到 .htaccess 文件中。

RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301,NE]
Header always set Content-Security-Policy "upgrade-insecure-requests;"

RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]

6.自定义你的错误页面:如果你想自定义你的404错误页面,你可以在.htaccess文件中定义你自己的自定义错误页面。只需将以下文本复制到您的 .htaccess 文件中即可。

# Example 1: redirect errors to html files
ErrorDocument 404 /404.html

# Example 2: redirect errors to PHP file
ErrorDocument 404 /error.php?q=404

7. Authenticated 文件夹:出于验证目的,您可以通过在 .htaccess 文件中添加以下代码来保护应用程序的目录。更新 .htaccess 文件后,您的目录将需要用户名和密码才能访问它。

AuthName "Your Authenticated Folder"
AuthUserFile /path/.htpasswd
AuthType Basic
require valid-user

这里代码的第一行告诉 Apache 网络服务器,受密码保护的目录的名称是“Your Authenticated Folder”。第二行告诉该文件夹的路径,下一行确定身份验证类型,在此示例中,我们使用的是 HTTP 基本身份验证。最后,最后一行说我们需要有效的凭据。