标签: htaccess

  • 什么是WordPress站点.htaccess文件?

    什么是WordPress站点.htaccess文件?

    您的WordPress站点的.htaccess文件是Web服务器Apache使用的基本配置文件。但很多服务器使用的Web服务器是Nginx而不是Apache,您实际上不会拥有.htaccess文件。

    但是,如果您在其他地方托管站点,了解.htaccess文件很重要,这也是您经常在WordPress教程中看到的主题。

    在本文中,您将详细了解WordPress站点.htacces 文件是什么以及它可以让您做什么。

    什么是WordPress站点.htaccess文件?

    .htaccess文件是Web服务器Apache使用的基本配置文件,可让您创建告诉Web服务器如何运行的特殊规则。它位于根文件夹中。

    默认情况下,您的WordPress站点使用.htaccess文件来控制站点的永久链接结构,但许多插件也将.htaccess文件用于其他目的,例如:

    • 添加特殊规则以更有效地提供缓存内容。
    • 设置自动重定向
    • 将HTTP重定向到HTTPS
    • 基于IP地址禁止/限制访问
    • 增加最大上传大小

    什么是.htaccess?更详细的解释

    回顾一下,.htaccess是Web服务器Apache使用的配置文件,它是大多数预算共享主机使用的Web服务器。作为一个基本的配置文件,它允许您创建特殊的规则来告诉您的Web服务器如何运行。

    默认情况下,您的WordPress站点使用.htaccess文件来控制站点的固定链接结构。许多WordPress插件也使用.htaccess文件。例如,如果您有一个缓存插件,它可能会向您的.htaccess文件添加自己的特殊规则,以更有效地提供缓存内容。

    除此之外,您还可以将自己的代码片段添加到您网站的 .htaccess 文件中,这样您就可以执行以下操作:

      • 重定向– 您可以在临时(如307)或永久的基础上设置自动重定向。例如,如果您更改网站的URL,您需要设置301重定向以确保不会损害您的流量或SEO。或者,如果您最近安装了SSL证书,则可以将HTTP重定向到HTTPS
    • 安全性– 您可以限制访问您的全部或部分站点以提高WordPress安全性。例如,您可以将其设置为只有某些列入白名单的IP地址(例如您的IP地址)才能访问您站点的管理区域。或者,您也可以禁止整个站点中的特定IP地址。
    • 其他配置调整– 您可以调整服务器的运行方式。例如,您可以增加最大上传大小来修复“uploaded file exceeds the upload_max_filesize directive in php.ini”错误。

    如何在WordPress中找到.htaccess文件

    如果您使用的Web服务器是Apache,则可以通过FTP或cPanel文件管理器连接到站点的服务器来定位和编辑站点的.htaccess文件。

    连接到服务器并能够浏览站点文件后,您可以在站点的根文件夹中找到WordPress站点的.htaccess文件,该文件夹与包含wp-config.php文件和wp-adminwp-content文件夹:

    WordPress站点的.htaccess文件所在的位置

    WordPress站点的.htaccess文件所在的位置

    默认情况下,您的站点将只有一个.htaccess文件——位于根文件夹中的文件。

    但是,可以在单独的目录中使用多个.htaccess文件,尽管WordPress在其默认状态下不会这样做。

    .htaccess文件适用于它所在的目录以及所有子目录,因此您可以将.htaccess文件添加到子目录以添加仅适用于该目录(及其任何子目录)的规则目录)。然而,通常只使用一个.htaccess文件并将所有规则保留在那里更简单。

    WordPress站点.htaccess文件示例

    默认情况下,您的WordPress站点的.htaccess文件仅包含一个控制站点固定链接功能的规则。这是它应该是什么样子的示例:

    WordPress站点默认.htaccess文件的示例

    WordPress站点默认.htaccess文件的示例

    如何将您自己的规则添加到.htaccess

    确保在进行任何编辑之前备份您网站的.htaccess文件,因为即使是一个小错误也可能使您的WordPress网站无法访问。

    要添加您自己的.htaccess 规则,您需要在现有WordPress站点.htaccess规则的上方或下方添加相关代码片段。

    我们将分享一些您可以做什么的示例,但免费的 .htaccess生成器站点提供了一个非常方便的工具来生成执行各种不同操作所需的代码片段。

    将所有流量重定向到您网站的HTTPS版本

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

    阻止IP地址

    //Block users by IP
    order allow,deny
    deny from 192.168.1.1
    allow from
    //Block users by IP
    order allow,deny
    deny from 192.168.1.1
    allow from
    //Block users by IP
    order allow,deny
    deny from 192.168.1.1
    allow from

    添加密码以访问您网站的一部分

    //Password Protect file
    <Files /wp-admin>
    AuthName “Prompt”
    AuthType Basic
    AuthUserFile /wp-admin
    Require valid-user
    </Files>
    //Password Protect file
    <Files /wp-admin>
    AuthName “Prompt”
    AuthType Basic
    AuthUserFile /wp-admin
    Require valid-user
    </Files>
    //Password Protect file
    <Files /wp-admin>
    AuthName "Prompt"
    AuthType Basic
    AuthUserFile /wp-admin
    Require valid-user
    </Files>

    您还需要添加一个单独的.htpasswd文件。

    这是添加一些自己的规则后 .htaccess 文件的外观示例……

    带有自定义规则的WordPress站点.htaccess文件示例

    带有自定义规则的WordPress站点.htaccess文件示例

    不使用.htaccess站点服务器:您如何进行更改?

    正如我们在上面告诉您的,闪电博网站使用Web服务器是Nginx,而不是Apache。这类Web服务器意味着任何WordPress网站都没有可用的.htaccess文件。

    然而,这并不意味着您在重定向、安全规则等方面仍然不能执行类似的操作。 .htaccess文件中的设置和规则可以轻松地“转换”为Nginx自己的重写规则语法。

    使用Nginx服务器,同样可以拥有许多重要的 .htaccess 功能。对于其他规则,Nginx还提供了自己的配置文件,您可以在其中类似地设置规则,尽管语法不同。

    设置重定向

    比如Nginx服务器HTTP流量重定向至HTTPS的规则如下:

    server {
    listen 80;
    server_name domain.com www.domain.com;
    return 301 https://domain.com$request_uri; }
    server {
    listen 80;
    server_name domain.com www.domain.com;
    return 301 https://domain.com$request_uri; }
    server { 
    listen 80; 
    server_name domain.com www.domain.com; 
    return 301 https://domain.com$request_uri; }

    阻止特定IP地址

    要阻止特定IP地址或者IP段访问您的站点,您在站点Nginx配置文件添加以下规则:

    ###允许某个ip访问
    allow 192.168.0.1;
    ###拒绝某个ip访问
    deny 192.168.0.2;
    ###拒绝123.0.0.1~123.255.255.254这个段的ip
    deny 123.0.0.0/8;
    ###拒绝123.1.0.1~123.1.255.254这个段的ip
    deny 123.1.0.0/16;
    ###拒绝123.1.1.1~123.1.1.254这个段的ip
    deny 123.1.1.0/24;
    ###allow跟deny配置相同,如果需要开放某个IP段,只需要把上面的deny改成allow
    ###允许某个ip访问
    allow 192.168.0.1;

    ###拒绝某个ip访问
    deny 192.168.0.2;

    ###拒绝123.0.0.1~123.255.255.254这个段的ip
    deny 123.0.0.0/8;

    ###拒绝123.1.0.1~123.1.255.254这个段的ip
    deny 123.1.0.0/16;

    ###拒绝123.1.1.1~123.1.1.254这个段的ip
    deny 123.1.1.0/24;

    ###allow跟deny配置相同,如果需要开放某个IP段,只需要把上面的deny改成allow

    ###允许某个ip访问
    allow 192.168.0.1;
    
    ###拒绝某个ip访问
    deny  192.168.0.2;
    
    ###拒绝123.0.0.1~123.255.255.254这个段的ip
    deny 123.0.0.0/8;    
    
    ###拒绝123.1.0.1~123.1.255.254这个段的ip
    deny 123.1.0.0/16;   
    
    ###拒绝123.1.1.1~123.1.1.254这个段的ip
    deny 123.1.1.0/24;   
    
    ###allow跟deny配置相同,如果需要开放某个IP段,只需要把上面的deny改成allow

    密码保护您的网站

    要锁定整个站点,通过Nginx的配置规则来实现:

    htpasswd是Apache密码生成工具,Nginx支持auth_basic认证,因此我门可以将生成的密码用于Nginx中,输入一行命令即可安装:yum -y install httpd-tools ,参数如下:

    -c 创建passwdfile.如果passwdfile 已经存在,那么它会重新写入并删去原有内容.
    -n 不更新passwordfile,直接显示密码
    -m 使用MD5加密(默认)
    -d 使用CRYPT加密(默认)
    -p 使用普通文本格式的密码
    -s 使用SHA加密
    -b 命令行中一并输入用户名和密码而不是根据提示输入密码,可以看见明文,不需要交互
    -D 删除指定的用户
    -c 创建passwdfile.如果passwdfile 已经存在,那么它会重新写入并删去原有内容.
    -n 不更新passwordfile,直接显示密码
    -m 使用MD5加密(默认)
    -d 使用CRYPT加密(默认)
    -p 使用普通文本格式的密码
    -s 使用SHA加密
    -b 命令行中一并输入用户名和密码而不是根据提示输入密码,可以看见明文,不需要交互
    -D 删除指定的用户
    -c 创建passwdfile.如果passwdfile 已经存在,那么它会重新写入并删去原有内容.
    -n 不更新passwordfile,直接显示密码
    -m 使用MD5加密(默认)
    -d 使用CRYPT加密(默认)
    -p 使用普通文本格式的密码
    -s 使用SHA加密
    -b 命令行中一并输入用户名和密码而不是根据提示输入密码,可以看见明文,不需要交互
    -D 删除指定的用户
    

    生成密码

    #进入home目录
    cd /home
    #生成密码
    htpasswd -c ./passwd username
    #执行上命令后会要求输入两次密码,./passwd 是在当前目录下创建密码文件passwd ,username即为需要设置的账号
    #进入home目录
    cd /home
    #生成密码
    htpasswd -c ./passwd username
    #执行上命令后会要求输入两次密码,./passwd 是在当前目录下创建密码文件passwd ,username即为需要设置的账号
    #进入home目录
    cd /home
    #生成密码
    htpasswd -c ./passwd username
    #执行上命令后会要求输入两次密码,./passwd 是在当前目录下创建密码文件passwd ,username即为需要设置的账号

    如果你不想安装htpasswd,也可以通过在线htpasswd生成器来完成。

    载入配置

    接下来在Nginx配置文件中(通常是server段内),加入如下两行,并重载Nginx(service nginx reload)即可生效。

    auth_basic “Please input password”; #这里是验证时的提示信息
    auth_basic_user_file /home/passwd;
    auth_basic “Please input password”; #这里是验证时的提示信息
    auth_basic_user_file /home/passwd;
    auth_basic "Please input password"; #这里是验证时的提示信息
    auth_basic_user_file /home/passwd;

    问题解决

    如果开启auth_basic认证后出现500错误,注意:

    • passwd改成nginx对应用户权限,比如您nginx配置的www用户来运行:chown www:www /home/passwd
    • 不要放到/root之类得目录下,请尝试移动到其它公共目录

    访问测试

    再访问站点,提示需要输入用户名和密码才可以访问,此方法适合不宜公开的站点,比如PHPmyadmin,这样可避免被弱口令扫描,无疑再上了一把锁。

    小结

    WordPress站点的.htaccess文件是Web服务器Apache使用的基本配置文件。虽然您可以将其用于各种用途,但WordPress用户想要使用的最常见功能是:

    • 重定向
    • IP地址黑名单/白名单
    • 密码保护文件夹
    • 等等。

    现在大部分自建的服务器使用较新的Web服务器Nginx而不是Apache,这些Web服务器上的WordPress站点没有.htaccess 文件。相反,当然Nginx也可以添加重定向和IP禁止规则,Nginx的配置文件相当于Apache的.htaccess文件。

  • 为什么找不到WordPress网站的.htaccess文件

    无法在WordPress安装目录找到.htaccess文件?一些WordPress入门者经常问“ .htaccess文件在哪里?” 和“为什么在我的WordPress网站找不到它?”。

    有时我们可能需要编辑.htaccess文件或将其删除以修复常见的WordPress错误。在本文中,将解释为什么您无法在WordPress网站上找到.htaccess文件,以及如何找到该文件。

    findinghtaccessfile

    什么是.htaccess文件?

    .htaccess文件是服务器配置文件,该文件告诉服务器如何处理网站上的某些内容。例如URL重定向,使用密码保护管理员区保护某些目录等。

    该文件位于您的WordPress网站的根文件夹中。WordPress使用它来管理重定向和永久链接。

    .htaccess文件是一个功能非常强大的配置文件,可以用来做很多有用的事情。在本文我们不展开说明,后面有机会我们再来详细聊一下关于.htaccess的一些技巧。

    为什么找不到.htaccess文件?

    在网站的根文件夹中找不到.htaccess文件的两个常见原因:它要么被文件管理器软件隐藏,要么根本不存在。

    1. FTP客户端未显示隐藏文件

    htaccess文件名前面的点表示它是一个隐藏文件。默认情况下,当您使用FTP客户端连接到WordPress托管服务器时,不会显示隐藏文件。

    要使隐藏文件可见,您将需要更改FTP客户端设置。

    例如,在FileZilla中,您可以在“Server»Force showing hidden files”菜单下找到该选项,强制显示隐藏文件。

    showhiddenfiles

    FileZilla隐藏文件显示设置

    如果您在cPanel中使用“文件管理器”应用程序,那么在启动该应用程序之前应勾选显示隐藏文件的选项。

    cpanel-hiddenfiles

    cPanel隐藏文件设置

    对于其他FTP客户端,一般应用程序设置或首选项菜单中找到显示隐藏文件的选项。

    启用此选项后,您才能够查看WordPress网站的所有隐藏文件,包括.htaccess文件。

    注:如果你使用宝塔面板来管理网站文件,可能就不存在这个问题了,因为默认情况下,宝塔面板均显示.htaccess文件。

    2. .htaccess文件不存在

    找不到.htaccess文件的第二个最常见的原因是您的WordPress网站尚未生成该文件,又或者它就不应该存在。

    WordPress自动生成.htaccess文件,因为需要依赖该文件实现重定向永久链接

    如果WordPress根目录没有.htaccess文件,那么您可以进入WordPress仪表盘,访问“设置”»“固定链接”页面,不作任何更改,直接单击“保存更改”按钮。

    permalinks

    WordPress固定链接修改

    WordPress将尝试为生成.htaccess文件。

    在极少数情况下,由于文件权限问题,WordPress可能无法生成.htaccess文件。

    在这种情况下,它将在“设置”»“固定链接”页面底部显示一条消息,提示“ .htaccess文件不可写”。

    在这种情况下,将需要您手动创建.htaccess文件,并在其中添加所需的代码。

    <IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    RewriteRule ^index.php$ – [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /index.php [L]
    </IfModule>
    <IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    RewriteRule ^index.php$ – [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /index.php [L]
    </IfModule>
    <IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    RewriteRule ^index.php$ - [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /index.php [L]
    </IfModule>

    只需将上述代码复制并粘贴到文本编辑器(如记事本)中,将其另存为.htaccess文件在桌面上。

    然后,使用FTP客户端连接到网站服务器,上传.htaccess文件至WordPress根目录。

    如果上传文件时出错,则需要更改根目录的文件权限。

    假设您所有的WordPress文件都位于/home/johnsmith/public_html/目录下。

    public_html文件夹成为网站根目录。转到其父目录,然后右键单击public_html文件夹。选择File Permissions,打开文件权限对话框。

    在文件权限对话框中输入755,然后再尝试将.htaccess文件上传到public_html文件夹。

    ftpfilepermission

    服务器文件/文件夹权限设置

    当然,如果你的WordPress网站使用的是Nginx服务器,那你可以完全忽略上述的内容,因为Nginx是与Apache完全不一样的一个Web服务器了。