`
congpeixue
  • 浏览: 274578 次
  • 性别: Icon_minigender_1
  • 来自: ...
社区版块
存档分类
最新评论

深入剖析linux系统.htaccess文件详细语法使用教程

    博客分类:
  • PHP
阅读更多
深入剖析linux系统.htaccess文件详细语法使用教程
RewriteCond 重写规则执行条件
语法: RewriteCond TestString CondPattern
生效域: server config, virtual host, directory, .htaccess
特别的上面的 TestString, 可提供反向引用. 引用模式为: %N 其中N为(0 <= N <=9), 引用当前若干RewriteCond条件中最后符合的条件中的分组成分, 也就是括号里的内容.不过用到的不多. 反向应用多在RewriteRule里常用.
RewriteCond 语法中的 TestStrng 为要被检查的内容, CondPattern 是进行匹配的规则, 它是一个兼容Perl风格的正则表达式和一些其他的特有字符属性. 这里介绍一下.
第一个: ! (感叹号) 表示否的意思. 比如一个条件: 判断访问此页面的上一页URL是否包含 sex 字符的话可以用这样: RewriteCond %{HTTP_REFERER} !(sex)
第二个: < 就是小于的意思, TestString < CondPattern.
第三个: > 就是大于于的意思, TestString < CondPattern.
第四个: = 相等的意思. <, >, = 三个和通常程序语言使用的 <, >, = 功能类似.
第五个: -d 是否是一个目录. 判断TestString是否不是一个目录可以这样: !-d
第六个: -f 是否是一个文件. 判断TestString是否不是一个文件可以这样: !-f
第七个: -s 是否是一个正常的有大小的文件. 判断TestString是否不是一个正常的有大小的文件可以这样: !-s
第八个: -l 是否是一个快捷方式文件. 判断TestString是否不是一个快捷方式文件可以这样: !-l
第九个: -x 是否是一个文件并且又执行权限. 判断TestString是否不是一个文件并且又执行权限可以这样: !-x
第十个: -F 检查TestString是否是一个合法的文件,而且通过服务器范围内的当前设置的访问控制进行访问。这个检查是通过一个内部subrequest完成的, 因此需要小心使用这个功能以降低服务器的性能。
第十一个: -U 检查TestString是否是一个合法的URL,而且通过服务器范围内的当前设置的访问控制进行访问。这个检查是通过一个内部subrequest完成的, 因此需要小心使用这个功能以降低服务器的性能.
另外: RewriteCond 指令后面可带 Flag, 现在只要2个可用, 一个是 NC|nocase, 不区分大小写的意思. 一个是 OR|ornext 表示连接下一个条件的意思.
RewriteCond 实际需要使用情况比如要判断一个条件成真的时候才执行相关的重写操作. 紧接着它下面的 RewriteRule 总是在RewriteCond 条件判断为真的时候才被执行.
看下面的一个例子:
#开启服务器重写模式
RewriteEngine on
#来自 www.test.cn 的连接访问本站时都只能访问 test.php 这页.
RewriteCond %{HTTP_REFERER} (www.test.cn)
RewriteRule (.*)$ test.php
#来自 www.test.com 的连接访问本站时都只能访问 newTest.php 这页.
RewriteCond %{HTTP_REFERER} (www.test.com)
RewriteRule (.*)$ newTest.php

OK, RewriteCond 就介绍到这里了. 其实很简单. 就想程序里的 if() 这样的效果.

下篇详解RewriteRule

本教程依次从以下几个方面介绍.htaccess相关知识。

   1. .htaccess文件使用前提
   2. 基本尝试语法介绍。
   3. 现学现用,利用正则表达式活学活用。
   4. 常见的.htaccess应用举例。
   5. .htaccess实现的一些其他功能。

一、.htaccess文件使用前提

.htaccess的主要作用就是实现url改写,也就是当浏览器通过url访问到服务器某个文件夹时,作为主人,我们可以来接待这个url,具体 地怎样接待它,就是此文件的作用。所有的访问都是通过URL实现,所以.htaccess的作用非同小可。正因为此,所以一般地网站通过设 置.htaccess,通过一个十分友好的url吸引用户进来,然后用.htaccess把用户带到需要访问的位置。

要想使用这个强大功能,就得开启apache里面的重写模块。

其实开启模块大体的步骤都是一样的,无论是Windows和linux。
二、.htaccess基本语法介绍

开启重写引擎 :

RewriteEngine on

设置重写的根目录:

RewriteBase /

— 说明 :因为定义了这个文件夹,所以对应的替换就有了一个参照。

匹配所有符合条件的请求:RewriteCond — 说明:RewriteCond 定义了一系列规则条件,这个指令可以有一条或者多条,只有用户拿来的url符合这些条件之后,我们的.htaccess才开始接待,否则用户就直接自己去 访问所需要的目录了。

举个例子,为了能让搜索引擎更多地抓取我们的网页而避免重复抓,我们通常把没有www的域名重定向到www.XXX.com,如下就实现了这个功能:

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

上例便把nbphp.com 重定向到www.nbphp.com

%{HTTP_HOST} 是指取得用户访问的URL的主域名 然后空格后面是一个正则表达式匹配,意识就是说是否是 nbphp.com 。

如果用户访问使用的URL满足所有列出的RewriteCond 提出的条件,那么进行下一步RewriteRule 即开始进行引导,这才开始实现.htaccess文件的重要功能。

同样,前面是正则表达式,用户分析用户的除了主域名nbphp.com之外的URL ,^(.*)$的意思就是所有的内容。 然后空格后面写的是我们引导用户访问的目录,我们带着他走到新的一个域名上。$1 指的是前面括号里匹配url所得到的内容。

这样就是一个完整的小例子。关于RewriteCond里 如何调用url的某个部分,我们可以参考这篇文章(Apache的Mod_rewrite学习 (RewriteCond重写规则的条件);
三、现学现用,学习正则表达式。

推荐一个经典的教程: 正则表达式30分钟入门教程

这个教程的确很简单,看完基本上写一些简单的正则就没有问题了。正则是一个需要长期使用的工具,隔段时间不用会忘记,所以我每次都看一遍这个教程。其实学过之后重要的就是一点内容。我简单罗列了如下:

.  换行符以外的所有字符

\w 匹配字母或数字或下划线或汉字

\s 匹配任意的空白符

\d 匹配数字

\b 匹配单词的开始或结束

^ 匹配字符串的开始

$ 匹配字符串的结束

* 重复零次或更多次

* 重复零次或更多次

+ 重复一次或更多次

? 重复零次或一次

{n} 重复n次

{n,}重复n次或更多次

{n,m} 重复n到m次

应用替换时,前面第一个()中匹配的内容后面就用$1引用,第二个()中匹配的就用$2应用……

我们来分析一下 discuz7.0 搜索引擎优化 htaccess 里面的重写。
RewriteRule ^forum-([0-9]+)-([0-9]+)\.html$ forumdisplay.php?fid=$1&page=$2

首先加入用户通过 nbphp.com/forum-2-3.html 访问discuz论坛,那么先通过.htaccess过滤,看看是否需要.htaccess引导一下用户,如果满足列出的一系列RewriteCond的 条件那么就进行重写,discuz的没有列出RewriteCond 所以应该全部都进行重写。所以开始进行转写,forum-2-3.html 这个正好符合 列出的^forum-([0-9]+)-([0-9]+)\.html$ 正则表达式。并且 $1 为 2 ,$2为3 ,所以代入后面,即 forumdisplay.php?fid=2&page=3 加上前面的RewriteBase 指定的文件目录,那么就带他到制定目录的forumdisplay.php?fid=2&page=3 。
四、常见的.htaccess应用举例(部分例子引自四个例子实战讲解.htaccess文件rewrite规则)
4.1防止盗链,如果来得要访问jpe jpg bmp png结尾的url 用户不是来自我们的网站,那么让他看一张我们网站的展示图片。

RewriteEngine On
RewriteCond %{HTTP_REFERER} !^http://(.+.)?mysite.com/ [NC]
RewriteCond %{HTTP_REFERER} !^$
RewriteRule .*.(jpe?g|gif|bmp|png)$ /images/nohotlink.jpg [L]

4.2 网站升级的时候,只有特定IP才能访问,其他的用户将看到一个升级页面

RewriteEngine on
RewriteCond %{REQUEST_URI} !/upgrade.html$
RewriteCond %{REMOTE_HOST} !^24\.121\.202\.30

RewriteRule $ http://www.nbphp.com/upgrade.html [R=302,L]
4.3把老的域名转向新域名

# redirect from old domain to new domain
RewriteEngine On
RewriteRule ^(.*)$http://www.yourdomain.com/$1[R=301,L]

五、一些其他功能
5.1 引出错误文档的目录

ErrorDocument 400 /errors/badrequest.html
ErrorDocument 404   http://yoursite/errors/notfound.html
ErrorDocument 401 “Authorization Required

5.2 Blocking users by IP 根据IP阻止用户访问

order allow,deny
deny from 123.45.6.7
deny from 12.34.5. (整个C类地址)
allow from all

5.3 防止目录浏览

# disable directory browsing
Options All -Indexes

5.4设置默认首页

# serve alternate default index page
DirectoryIndex about.html

5.5 把一些老的链接转到新的链接上——搜索引擎优化SEO

Redirect 301 /d/file.htmlhttp://www.htaccesselite.com/r/file.html

5.6为服务器管理员设置电子邮件。

<pre lang="php">
ServerSignature EMail
SetEnv SERVER_ADMINdefault@domain.com

总结:

本文章主要介绍了应用最广最实用的重写功能,记住.htaccess的权限要设置成644,但愿对您有所帮助,当然本文肯定有介绍不到位的地方,望指正,谢谢!
分享到:
评论

相关推荐

    ThinkPHP的.htaccess文件

    ThinkPHP的去除URL中的index.php的.htaccess文件

    apache开启.htaccess及.htaccess的使用方法.docx

    下面将详细介绍如何开启.htaccess 文件的使用方法。 一、开启.htaccess 文件的使用方法 1. 打开 Apache 的配置文件 httpd.conf,通常位于 Apache 目录的 conf 目录下。 2. 在 httpd.conf 文件中,查找以下两行代码...

    Apache的Mode Rewrite模块和.htaccess文件配合.docx

    .htaccess文件的配置方法是在文件中添加相关的指令,例如Options Indexes FollowSymLinks AllowOverride All,这将启用目录浏览和符号链接功能,并允许在当前目录下使用.htaccess文件。然后,在.htaccess文件中添加...

    .htaccess文件教程 301重定向 自定义404错误

    在本教程中,我们将重点探讨 `.htaccess` 文件如何实现301重定向以及自定义404错误页面。 首先,301重定向是一种HTTP状态码,意味着永久性转移。当用户或搜索引擎访问某个URL时,服务器通过301重定向将请求转发到新...

    解析 .htaccess 文件 apache rewrite

    `.htaccess` 文件是Apache web服务器中的一个配置文件,它允许用户在网站根目录下进行局部配置,以实现一些高级功能,如URL重写、防盗链控制等。这个文件的全称是“分布式配置文件”,即分散在各个目录下的配置文件...

    让IIS支持Apache .htaccess 伪静态规则

    这两种服务器在处理URL重写和伪静态规则方面有所不同,Apache通常使用的是.htaccess文件,而IIS则使用其内置的URL重写模块。本篇文章将详细讲解如何让IIS支持Apache的.htaccess伪静态规则。 首先,了解什么是伪静态...

    nginx支持.htaccess伪静态rewrite的方法.docx

    在需要使用 .htaccess 文件的目录下新建一个 .htaccess 文件。这个文件一般都是由 Discuz、Dedecms 等系统自带的。如果您使用的是这些系统,可以直接找到这个文件。如果不是,可以手动创建一个新的 .htaccess 文件。...

    信息安全技术基础:利用.htaccess文件上传.pptx

    本文将深入探讨如何利用.htaccess文件进行恶意上传以及相关的安全风险。 首先,.htaccess文件的主要作用是当用户无法直接编辑服务器的主配置文件httpd.conf时,提供了一种在目录级别进行配置的方法。例如,它能用来...

    htaccess文件使用指南

    通常,如果主机运行的是Unix或Linux系统,或者使用了Apache网络服务器的任意版本,理论上都应支持`.htaccess`。然而,部分主机服务商可能会出于安全考虑或资源限制,选择不开放`.htaccess`的使用权限。一个判断依据...

    第四节 文件上传-绕过黑名单验证(.htaccess文件)-01

    绕过黑名单验证是一种常见的攻击技术,攻击者可以使用各种方法来绕过黑名单验证,例如上传 .htaccess 文件、使用 phpinfo 探针、使用其他类型的文件等。因此,在 Web 应用程序安全中,需要格外小心地配置黑名单验证...

    任意文件上传-(一).htaccess文件

    只要和.htaccess文件同目录下就会被当成脚本解析; 用于利用某些Web服务器(尤其是Apache)的配置漏洞,以实现更高级的文件上传攻击或执行其他恶意操作。 文件类型解析:通过.htaccess修改服务器配置,可以让服务器...

    ThinkPHP 利用.htaccess文件的 Rewrite 规则隐藏URL中的 index.php

    在使用 ThinkPHP 框架开发 Web 应用时,我们常常希望使应用程序的 URL 更加美观和符合 SEO(搜索引擎优化)的要求。ThinkPHP 支持通过 `.htaccess` 文件和 Apache 的 `mod_rewrite` 模块来实现 URL 重写,从而隐藏 ...

    nginx支持.htaccess文件实现伪静态的方法分享

    1. 在需要使用.htaccess文件的目录下新建一个.htaccess文件, 如本人的一个Discuz论坛目录: 代码如下:vim /var/www/html/168pc/bbs/.htaccess 2. 在里面输入规则,我这里输入Discuz的伪静态规则: 代码如下: # ...

    .htaccess伪静态

    .htaccess伪静态 适用方维分享系统以及其他php

    工具查询.htaccess Editor:htaccess在线生成器-htaccesseditor.zip

    1. 使用场景:对于不熟悉 Apache 配置语法的用户,htaccessEditor 提供了直观的界面,方便生成或编辑 .htaccess 文件。 2. 功能特性: - 简洁界面:提供各种配置选项,用户只需填写参数,无需理解复杂指令。 - ...

    mac 下 drupal .htaccess配置文件

    mac电脑在xampp环境下搭建drupal使用的.htaccess配置文件,下载后将文件名改为.htaccess放在网站根目录即可。 如果网站不在根目录则放在对应级别的目录下 并修改htaccess文件119行和123行,将119行RewriteBase /...

    .htaccess文件

    伪静态实现

    中国最新IP地址段(包含IP地址和.htaccess文件)

    包含了中国所有的IP段, 包括各地网通, 电信, 移动, 铁通, 教育网, 以及广电运营商, 公司自...使用方法很简单, Apache环境下利用.htaccess的命令deny, 你可以使用整理好的.htaccess文件, 然后放到你的网站根目录下即可.

    BBS下普通.htaccess.zip

    在BBS(Bulletin Board System,电子公告板系统)这样的论坛环境中,.htaccess 文件的作用尤为关键。它可以用来优化论坛的URL结构,使得帖子、分类等信息的链接更加直观易懂,提高用户的浏览体验。同时,针对论坛中...

    Apache Web服务器.htaccess文件配置.docx

    这篇文章主要介绍了如何使用`.htaccess`文件实现一系列功能,包括阻止特定IP或搜索引擎爬虫访问、限制特定国家IP的访问、防止图片和文件盗链以及创建自定义错误页面。 首先,`.htaccess`文件可以用来屏蔽特定的搜索...

Global site tag (gtag.js) - Google Analytics