Apache配置文件.htaccess重定向编写规则

Web TOMORROW 12个月前 (07-06) 725次浏览 0个评论 扫描二维码

 

.htaccess文件是Apache服务器的一个配置文件,称作“分布式配置文件”。通过配置此文件可以实现网站的 URL重定向,目录重定向,图片防盗链,伪静态以及禁止访问等功能。本文将介绍.htaccess文件的启用方法,.htaccess文件的编写规则和一些常用的实例。

启用.htaccess文件配置

要想使用.htaccess文件进行配置网站,那么首先要启用.htaccess文件,使得它的配置内容生效。

打开 apache/conf/httpd.conf 文件(Apache的安装目录下),查找下面语句,并将前面的注释’#’删除,然后保存,重启Apache服务器程序;

#LoadModule rewrite_module modules / mod_rewrite.so

.htaccess 文件的编写规则

接下来就可以开始编写.htaccess 文件了,如果没有需要创建,该文件应该放在网站的根目录下。

下面来接收.htaccess 的基本语法,先看一个例子

RewriteEngine On 
RewriteBase /
RewriteCond %{HTTP_HOST} ^www.tomorrow.wiki$
RewriteRule ^tag/.*$ https://www.tomorrow.wiki/404 [R=301,L]
  • RewriteEngine On表示打开重写引擎,要开启重定向首先要开启这个;
  • RewriteBase /则是表示下面所写的规则的基准目录是网站根目录;
  • RewriteCond表示的是重写的条件,也就是只有当满足重写条件才会执行下面的重写规则;
  • %{HTTP_HOST}是一个变量,是Apache服务器程序的变量,HTTP_HOST变量名,还有很多其他的变量名;
  • RewriteRule 就是重写(重定向)的规则;
  • 其中字符串部分,^表示字符串的开始,$表示字符串的结束;通常还会用到其他的正则表达式;
  • 总体来说,上面四行配置语句表达的是,当满足HTTP_HOST = www.tomorrow.wiki(访问 www.tomorrow.wiki 主机)时,将tag/目录的所有请求重定向到 https://www.tomorrow.wiki/404 ,也就是将 https://www.tomorrow.wiki/tag/***这样的请求重定向,因为基准目录是根目录;[R=301,L]是额外的一些参数;

其实,配置的语法都很简单,看完上面的介绍,就可通过查找相应的变量名就可以进行随意的编写自己的规则了;但是对于不懂得正则表达式的人来说,还是很难自己编写,甚至只是看懂的。所以想要自己编写,还是得到了解正则表达式的基本的写法。

参考:.htaccess 正则表达式规则

.htaccess常用的重写规则

  • 给二级域名重定向到 www.tomorrow.wiki 域名
    rewriteEngine on
    RewriteBase /
    rewriteCond %{http_host} ^tomorrow.wiki$ [NC]
    rewriteRule ^(.*)$ https://www.tomorrow.wiki/$1 [R=301,L]
    
  • 重定向 olddomain.com 到 www.tomorrow.wiki
    RewriteEngine On
    RewriteCond %{HTTP_HOST} ^olddomain.com$ [NC]
    RewriteRule ^(.*)$ https://www.tomorrow.wiki/$1 [L,R=301]
    
  • 重定向 www.tomorrow.wiki 到 tomorrow.wiki
    RewriteEngine On
    RewriteCond %{HTTP_HOST} !^tomorrow.wiki$ [NC]
    RewriteRule ^(.*)$ https://tomorrow.wiki/$1 [L,R=301]
    
  • 网站升级时,临时错误页面
    RewriteCond %{REQUEST_URI} !/tomorrow.html$     
    RewriteCond %{REMOTE_ADDR} !^123.123.123.123$       
    RewriteRule $ /upgrade.html [R=302,L]               
    
  •  404 重定向
    ErrorDocument 404 /404.html
    
  • 图片防盗链
    RewriteCond %{HTTP_REFERER} !^$ [NC]
    RewriteCond %{HTTP_REFERER} !tomorrow.wiki [NC]
    RewriteCond %{HTTP_REFERER} !google.com [NC]
    RewriteCond %{HTTP_REFERER} !baidu.com.com [NC]
    RewriteCond %{HTTP_REFERER} !feedburner.com [NC]
    RewriteCond %{HTTP_REFERER} !feedsky.com [NC]
    RewriteRule .*\.(gif|jpg|png)$ https://www.tomorrow.wiki/unauthorized.png [R,NC,L]
    
  •  伪静态
    RewriteRule ^(\d+)\.html$ index.php?id=$1
    

     

 

以上.htaccess 文件配置实例都需要在看得懂的基础才可能正确使用。

Apache变量和参数

Apache服务器的变量列表

HTTP_USER_AGENT                  //主要用于检测访问者系统和浏览器等
HTTP_REFERER                     //从哪个页面链接过来 
HTTP_COOKIE
HTTP_FORWARDED
HTTP_HOST                        //域名
HTTP_PROXY_CONNECTION
HTTP_ACCEPT                      
REMOTE_ADDR
REMOTE_HOST
REMOTE_USER
REMOTE_IDENT
REQUEST_METHOD
SCRIPT_FILENAME
PATH_INFO
QUERY_STRING
AUTH_TYPE
DOCUMENT_ROOT
SERVER_ADMIN
SERVER_NAME
SERVER_ADDR
SERVER_PORT
SERVER_PROTOCOL
SERVER_SOFTWARE
TIME_YEAR
TIME_MON
TIME_DAY
TIME_HOUR
TIME_MIN
TIME_SEC
TIME_WDAY
TIME
API_VERSION                      //这是正在使用的 httpd 中(服务器和模块之间内部接口)的 Apache 模块 API 的版本, 其定义位于 include/ap_mmn.h 中。此模块版本对应于正在使用的 Apache 的版本 (比如,在 Apache 1.3.14 的发行版中,这个值是 19990320:10)。 通常,对它感兴趣的是模块的作者。
THE_REQUEST                      //这是由浏览器发送给服务器的完整的 HTTP 请求行。(比如, “GET /index.html HTTP/1.1″). 它不包含任何浏览器发送的附加头信息。
REQUEST_URI                      //这是在 HTTP 请求行中所请求的资源。
REQUEST_FILENAME                 //这是与请求相匹配的完整的本地文件系统的文件路径名或描述.
IS_SUBREQ                        //如果正在处理的请求是一个子请求,它包含字符串”true”,否则就是”false”。 模块为了解析 URI 中的附加文件,有可能会产生子请求。

.htaccess 的参数列表

RewriteRule 标记 含 义 描 述
R Redirect 发出一个 HTTP 重定向
F Forbidden 禁止对 URL 地址的存取
G Gone 标记 URL 地址不存在
P Proxy 将 URL 地址传递给 mod_proxy
L Last 停止处理接下来的规则
N Next 再次重第一个规则开始处理,但是使用当前重写后的 URL 地址
C Chain 将当前的规则和紧随其后的规则链接起来
T Type 强制执行指明的 MIME 类
NS Nosubreq 只在没有任何内部子请求执行时运行本脚本
NC Nocase URL 地址匹配对大小写不敏感
QSA Qsappend 在新的 URL 地址后附加查询字符串部分,而不是替代
PT Passthrough 将重写后的 URL 地址传递给另一个 Apache 模块进行进一步处理
S Skip 忽略之后的规则
E Env 设置环境变量

固定表达式

rewritecond 的其他用法:
“-d”(目录)
    将 TestString 视为一个路径名并测试它是否为一个存在的目录。
“-f”(常规文件)
    将 TestString 视为一个路径名并测试它是否为一个存在的常规文件。
“-s”(非空的常规文件)
    将 TestString 视为一个路径名并测试它是否为一个存在的、尺寸大于 0 的常规文件。
“-l”(符号连接)
    将 TestString 视为一个路径名并测试它是否为一个存在的符号连接。
“-x”(可执行)
    将 TestString 视为一个路径名并测试它是否为一个存在的、具有可执行权限的文件。该权限由操作系统检测。
“-F”(对子请求存在的文件)
    检查 TestString 是否为一个有效的文件,而且可以在服务器当前的访问控制配置下被访问。它使用一个内部子请求来做检查,由于会降低服务器的性能,所以请谨慎使用!
“-U”(对子请求存在的 URL)
    检查 TestString 是否为一个有效的 URL,而且可以在服务器当前的访问控制配置下被访问。它使用一个内部子请求来做检查,由于会降低服务器的性能,所以请谨慎使用!

最后推荐一个.htaccess 文件生成器工具:.htaccess 文件在线生成器

参考:

https://yq.aliyun.com/ziliao/45225

https://www.cnblogs.com/itshark/p/5849750.html

 


TOMORROW 星辰 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:Apache 配置文件.htaccess 重定向编写规则
喜欢 (0)
TOMORROW
关于作者:
一个从石头坑掉到泥坑里的攻城狮。
粗犷的摩托发表我的评论  请填写正确的 个人信息
取消评论
表情 加粗 斜体 签到