.htaccess重定向和url重写详细介绍

什么是htaccess

概述来说,htaccess文件是Apache服务器中的一个配置文件,它负责相关目录下的网页配置。通过htaccess文件,可以帮我们实现:网页301重定向、自定义404错误页面、改变文件扩展名、允许/阻止特定的用户或者目录的访问、禁止目录列表、配置默认文档等功能。

一个简单的重定向


代码如下:

Redirect 301 ^old.html$ http://localhost/new.html

这是设置一个http状态码为301(永久移动)并把所有访问old.html转向到new.html。使用了正则表达式来匹配访问的页面,后面的url必须是完整路径。

Url重写



代码如下:

RewriteEngine on
RewriteRule ^old.html$ new.html

第一行打开重写引擎
第二行是重写规则。这样用户访问old.html时实际却是访问的new.html,而且用户对此好吧知情。因为地址栏里依旧显示是old.html。

为了在地址栏显示新的访问地址,我们可以加个f标志在rewriterule语句里。

代码如下:

RewriteRule ^old.html$ http://hostname/new.html [r=301]

下面是把带查询参数的url重写成对搜索引擎友好的url


代码如下:

RewriteRule ^products/([^/]+)/([^/]+)/([^/]+) product.php?cat=$1&brand=$2&prod=$3

这条规则允许访问者以类似这样的
url products/turntables/technics/sl1210,
来访问product.php?cat=turntables&brand=technics&prod=sl1210.

括号里为一个单元,分别对应后面的$1,$2,$3。[^/]+ 在原括号里表示除了/之外的任何一个或是多个字符。

自定义错误页面

代码如下:

ErrorDocument 404"/404.html"

这是定义404页面无法找到的错误,也可以定义其他错误代码的页面。

限定访问特点资源

代码如下:

<Files"protectedfile.html">
AuthName"Username and password required"
AuthUserFile/path/to/.htpasswd
Require valid-user
AuthType Basic
</Files>

保护protectedfile.html,authName是登陆框的提示信息,authuserfile是.htpasswd文件的路径

阻止某些ip访问

代码如下:

order allow,deny
deny from 192.168.0.1
allow from allOrder

告诉apache指令的顺序。这里的这个是先允许后拒绝的。虽然allow from all后出现但是还是在前面生效。拒绝了192.168.0.1的访问。也可以按段来屏蔽访问的,只要只指定前面的几段就可以类似,192.168.

实现缓存

代码如下:

ExpiresActive on
ExpiresByType image/gif "access plus 1 month"
ExpiresByType image/png "access plus 1 month"
ExpiresByType image/jpg "access plus 1 month"
ExpiresByType image/jpeg "access plus 1 month"

第一行开启,下面分别控制各种资源都加上一个月的缓存期。这个功能依赖apache的mod_expires 模块。

认证举例
如果你只是为了知道如何认证,而直接从这里开始看的,有很重要的一点需要注意,有一种常见的误解,认为实现密码认证必须要使用.htaccess文件,其实是不正确的。把认证指令放在主配置文件的<Directory>段中是一个更好的方法,而.htaccess文件应该仅仅用于无权访问主配置文件的时候。参见上述关于何时应该与何时不应该使用.htaccess文件的讨论。
有此声明在先,如果你仍然需要使用.htaccess文件,请继续看以下说明。

.htaccess文件的内容:

代码如下:

AuthType Basic
AuthName "Password Required"
AuthUserFile /www/passwords/password.file
AuthGroupFile /www/passwords/group.file
Require Group admins

必须设置 AllowOverride AuthConfig 以允许这些指令生效。
服务器端包含(SSI)举例
.htaccess文件的另一个常见用途是允许一个特定的目录使用服务器端包含(SSI),可以在需要的目录中放置.htaccess文件,并作如下配置:

代码如下:

Options +Includes
AddType text/html shtml
AddHandler server-parsed shtml

注意,必须同时设置 AllowOverride Options 和 AllowOverride FileInfo 以使这些指令生效。

指令的作用范围.htaccess文件中的配置指令作用于.htaccess文件所在的目录及其所有子目录,但是很重要的、需要注意的是,其上级目录也可能会有.htaccess文件,而指令是按查找顺序依次生效的,所以一个特定目录下的.htaccess文件中的指令可能会覆盖其上级目录中的.htaccess文件中的指令,即子目录中的指令会覆盖父目录或者主配置文件中的指令。

例子:

代码如下:

/www/htdocs/example1

目录中的.htaccess

文件有如下内容:
Options +ExecCGI

(注意:必须设置"AllowOverride Options"以允许在.htaccess中使用"Options"指令)
/www/htdocs/example1/example2目录中的.htaccess文件有如下内容:
Options Includes

(0)

相关推荐

  • Access数据库不能写不能更新的解决方法

    Access数据库不能写,造成这种问题的原因是Web共享文件夹在NTFS分区里,而IUSR_***(Internet来宾帐户)没有足够权限.解决方法: 1.在文件夹选项里,将"使用简单文件共享"前的对勾去掉. 2.在Web共享文件夹属性里面的安全选项卡中点添加. 3.在选择用户或组的对话框中点高级. 4.点立即查找,随后在下面选择IUSR_***,确定. 5.返回文件夹属性,将IUSR_***权限设置为允许修改,写入 IIS不能读写数据库(ACCESS)问题原因主要是由于无法更新数据库

  • 将ACCESS数据库迁移到SQLSERVER数据库两种方法(图文详解)

    ACCESS2000文件 用ACCESS2007打开,并迁移到SQLSERVER2005里 打开ACCESS2007的数据库工具 方法一:使用ACCESS2007自带的数据库迁移工具 1.打开ACCESS2007的数据库迁移向导 2.点击SQLSERVER按钮,弹出升迁向导对话框 3.选择新建数据库 4.输入计算机名,我的本地计算机名字叫joe,因为SQLSERVER安装在本地,所以选择使用可信连接就可以了 数据库名称默认就可以了 5.选择所有表,移动到右边框 6.把表索引也一起升迁到SQLSE

  • PHP has encountered an Access Violation at XXXXXX 的解决方法

    排错方法: 最好先查看系统日志文件,我们从日志中就可以发现很多问题. 我们就是因为数据库表出错,修复一下就可以了,重启下iis或重启下服务器试试. 有客户反映在美国VPS中出现该错误:PHP has encountered an Access Violation at * 根据错误提示,可以用以下办法解决: 1.重启IIS,重启VPS主机即可. 2.关闭eaccelerator扩展 找到php.ini 如果是我帮您配置的,一般在c:/windows/php.ini 去掉 zend_extensi

  • SQL查询语句通配符与ACCESS模糊查询like的解决方法

    ACCESS的通配符和SQL SERVER的通配符比较===================================================ACCESS库的通配符为:*   与任何个数的字符匹配?   与任何单个字母的字符匹配 SQL Server中的通配符为:% 与任何个数的字符匹配_ 与单个字符匹配正文我今天在写个页面的时候,也很郁闷,表中明明有记录,但在ASP里就是搜索不到,理论的sql语句如下:Select * FROM t_food Where t_food.name

  • win2008下IIS7、IIS7.5 配置ASP+ACCESS使用环境

    一.IIS7的安装 Windows 中IIS7.IIS7.5是默认不安装的,所以在安装完Windows Vista/windows 7/windows 2008之后如果需要安装IIS7/iis7.5的话,就要自己动手了. 安装的步骤为:开始>控制面板>程序>打开或关闭Windows功能>Internet信息服务.IIS7安装时需要注意的是,如果需要ASP.ASP.NET等的支持,是需要把功能模块给装上的,默认是不安装的. IIS7安装完成之后可以在开始菜单的所有程序中看到"

  • Mssql,Access的sql经典SQL语句大全

    下列语句部分是Mssql语句,不可以在access中使用. SQL分类: DDL-数据定义语言(CREATE,ALTER,DROP,DECLARE) DML-数据操纵语言(SELECT,DELETE,UPDATE,INSERT) DCL-数据控制语言(GRANT,REVOKE,COMMIT,ROLLBACK) 首先,简要介绍基础语句: 1.说明:创建 数据库 CREATE DATABASE database-name 2.说明:删除数据库 drop database dbname 3.说明:备份

  • 如何让access自动编号从1开始排序实现方法

    方法一: 删个那个自动编号的字段,再建一个同样的自动编号字段即可. 方法二: 自动编号是一直增加的(每次都加1),你再增加一条记录它的编号会在前面的基础上加1(删除的也算),如果你编号为1的记录被删除了,你想再要从1开始,可以打开Access数据库,选择工具,再选择数据库实用工具,单击压缩和修复数据库,这样就OK了. 方法三:(没试过) 1.在access里新建一个查询. 2.把视图改为sql视图. 3.在里面输入 ALTER TABLE 表名 ALTER COLUMN [自动编号字段名] CO

  • c#连接access数据库操作类分享

    1.配置web.config文件:配置数据库连接参数(根据实际情况设置数据库路径和密码) 复制代码 代码如下: <configuration><appSettings/><connectionStrings><add name="ConnectionString" connectionString="PRovider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\keleyi\App_Data\db.m

  • Access日期与时间函数汇总

    今天在开发系统的时候,需要实现这样一个功能 根据选中的日期,查询相关的内容,但不是按照整个日期去过滤,而是根据,年,月,日拆分的形式去过滤,比如2013年的,2月份的 在sqlserver中,我们可以可以直接根据datePart去完成即可 select * from pays where 1=1 and datepart(year, pdate)=2013 and datepart(month, pdate)=2 and datepart(day, pdate)=26 order by pdat

  • ASP连接Access数据库的几种方法

    1. 相对与比较老的环境,建议使用第二个 set dbconnection=Server.CREATEOBJECT("ADODB.CONNECTION") DBPath = Server.MapPath("customer.mdb") dbconnection.Open "driver={Microsoft Access Driver (*.mdb)};dbq=" & DBPath SQL="select * from auth

  • 搭建小型access数据库实录

    今天在确认实习生不能帮忙搭建数据库后,自己根据业务需求尝试搭了一个小型access数据库. 主要目的:储存历史月度数据,避免每次从公司数据库下载数据的麻烦,节省数据拉取时间. 搭建了以acct id为主键的两种数据. 1)客户信息,包括 由业务人员手工更新汇总的数据,如客户所在区域,商业信息等. 由机器抓取的客户信息,如客户账号状态,专属业务人员信息等等. 上述数据按照每月定期更新,以及每周更新,存储在不同的表里. 2)客户交易信息,计划包括: 汇总月度信息,如月成交额,交易量等: 分多个维度的

  • ASP.NET 连接ACCESS数据库的简单方法

    index.aspx 复制代码 代码如下: <%@ Page Language="C#" %><%@ import Namespace="System.Data" %><%@ import Namespace="System.Data.OleDb" %><script runat="server">    // Insert page code here    //    voi

随机推荐