`

关于.htaccess的配置

 
阅读更多

1.开启mod_rewrite
将#LoadModule rewrite_module modules/mod_rewrite.so
这行的#去掉

2.修改httpd.conf
1)将你的网站目录配置中的
AllowOverride None 改为AllowOverride All

2)修改Options的属性
建议改为Indexes FollowSymLinks

FollowSymLinks
服务器允许在此目录中使用符号连接。
Indexes
如果一个映射到目录的URL被请求,而此目录中又没有DirectoryIndex(例如:index.html),那么服务器会返回由mod_autoindex生成的一个格式化后的目录列表。
说明:由于目前apache2.2版本以后Options默认的值是None,导致启用.htaccess后出现403错误。这个问题困扰了很久,因为开始没有注意到这个问题。所有很长时间在本地无法测试re_write功能的程序。

昨天晚上看apache的error.log时看到
[Sat Aug 09 23:06:19 2008] [error] [client 127.0.0.1 ] Options FollowSymLinks or SymLinksIfOwnerMatch is off which implies that RewriteRule directive is forbidden: G:/hekey/www/111/post/0, referer: http://localhost/111/admin.php?go=misc_urlrewrite
错误的时候才知道是Options的问题


在网上找了很多篇关于配置apache mod_rewrite的文章,发觉这篇最有用,大家需要的可参考一下。

1,通过php提供的phpinfo()函数查看环境配置,通过Ctrl+F查找到“Loaded Modules”,其中列出了所有apache2handler已经开启的模块,如果里面包括“mod_rewrite”,则已经支持,不再需要继续设置。
如果没有开启“mod_rewrite”,则打开目录 您的apache 安装目录“/apache /conf/” 下的 httpd.conf 文件,通过Ctrl+F查找到“LoadModule rewrite_module”,将前面的”#”号删除即可。如果没有查找到,则到“LoadModule” 区域,在最后一行加入“LoadModule rewrite_module modules/mod_rewrite.so”(必选独占一行),然后重启apache 服务器即可。

2, 让apache 服务器支持”.htaccess”
如何让自己的本地APACHE 服务器支持”.htaccess”呢?其实只要简单修改一下apache 的httpd.conf设置就可以让APACHE 支 持.htaccess了。打开httpd.conf文件(在那里? APACHE 目录的CONF目录里面),用文本编辑器打开后,查找
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
改为
<Directory />
Options FollowSymLinks
AllowOverride All
</Directory>
就可以了

3,建立 “.htaccess” 文件
如果是在windows 平台下,刚开始还真不知道怎么建立”.htaccess”文件,因为这个文件实际上没有文件名,仅仅只有扩展名,通过普通方式是无法建立这个文件的,别着急,马上告诉你三种方法:
三种方法都是先建立一个htaccess.txt的文本文件(当然,这个文本文件的名字你可以随便取),然后有三种方式给这个文件重命名:(1)用记事本 打开,点击文件–另存为,在文件名窗口输入”.htaccess”,注意是整个绿色部分,也就是包含英文引号,然后点击保存就行了。(2)进入cmd命令 窗口,通过cd切换当刚建立htaccess.txt文件的文件夹,然后输入命令:rename htaccess.txt .htaccess ,然后点击键盘Enter键即可。(3)通过ftp连接htaccess.txt所在文件夹,通过ftp软件重命名。
那么我们须要建立几个“.htaccess” 文件,里面又输入什么内容呢?基本的原则是这样,根目录必须有一个,用于重定向(URl重写)所有的请求都会转到到index.php (交 给前端控制 器);”./application”文件夹下须要一个,用于拒绝所有针对该文件夹内容的直接访问(比如 http://localhost/application/models/User.php),这样做是因为所有访问请求必选通过前端控制器来分配访 问,其次为了安全;“./library”文件夹下的“.htaccess”同前;”./public”文件夹下必选建一个,因为这个文件夹的文件全部是 供前端直接访问的,因此须要撤销URl重写。以下是4个“./htaccess”文件的内容:
./.htaccess
RewriteEngine on
RewriteRule !/.(js|ico|gif|jpg|png|css)$ index.php
./application/.htaccess
deny from all
./library/.htaccess
deny from all
./public
RewriteEngine off
实际上,apache 的url重写功能也可以直接在httpd.conf文件中进行设置,这里就不具体讲了,网上相关的教程也很多。


rewrite标志

R [=code](force redirect) 强制外部重定向
强制在替代字符串加上http://thishost[:thisport]/前缀重定向到外部的URL.如果code不指定,将用缺省的302 HTTP状态码。
F (force URL to be forbidden)禁用URL,返回403HTTP状态码。
G (force URL to be gone) 强制URL为GONE,返回410HTTP状态码。
P (force proxy) 强制使用代理转发。
L (last rule) 表明当前规则是最后一条规则,停止分析以后规则的重写。
N (next round) 重新从第一条规则开始运行重写过程。
C (chained with next rule) 与下一条规则关联
如果规则匹配则正常处理,该标志无效,如果不匹配,那么下面所有关联的规则都跳过。
T =MIME-type(force MIME type) 强制MIME类型
NS (used only if no internal sub-request) 只用于不是内部子请求
NC (no case) 不区分大小写
QSA (query string append) 追加请求字符串
NE (no URI escaping of output) 不在输出转义特殊字符
例如:RewriteRule /foo/(.*) /bar?arg=P1/%3d$1 [R,NE] 将能正确的将/foo/zoo转换成/bar?arg=P1=zed
PT (pass through to next handler) 传递给下一个处理
例如:
RewriteRule ^/abc(.*) /def$1 [PT] # 将会交给/def规则处理
Alias /def /ghi
S =num(skip next rule(s)) 跳过num条规则
E =VAR:VAL(set environment variable) 设置环境变量

rewrite时服务器变量:
HTTP headers:HTTP_USER_AGENT, HTTP_REFERER, HTTP_COOKIE, HTTP_HOST, HTTP_ACCEPT
connection & request: REMOTE_ADDR, QUERY_STRING
server internals: DOCUMENT_ROOT, SERVER_PORT, SERVER_PROTOCOL
system stuff: TIME_YEAR, TIME_MON, TIME_DAY

Rewrite规则表达式的说明:
. 匹配任何单字符
[chars] 匹配字符串:chars
[^chars] 不匹配字符串:chars
text1|text2 可选择的字符串:text1或text2
? 匹配0到1个字符
* 匹配0到多个字符
+ 匹配1到多个字符
^ 字符串开始标志
$ 字符串结束标志
/n 转义符标志

反向引用 $N 用于 RewriteRule 中匹配的变量调用(0 <= N <= 9)
反向引用 %N 用于 RewriteCond 中最后一个匹配的变量调用(1 <= N <= 9)

RewriteCond标志符
'nocase|NC'(no case)忽略大小
'ornext|OR' (or next condition)逻辑或,可以同时匹配多个RewriteCond条件

RewriteRule适用的标志符
'redirect|R [=code]' (force redirect)强迫重写为基于http开头的外部转向(注意URL的变化) 如:[R=301,L]
'forbidden|F' (force URL to be forbidden)重写为禁止访问
'proxy|P' (force proxy)重写为通过代理访问的http路径
'last|L' (last rule)最后的重写规则标志,如果匹配,不再执行以后的规则
'next|N' (next round)循环同一个规则,直到不能满足匹配
'chain|C' (chained with next rule)如果匹配该规则,则继续下面的有Chain标志的规则。
'type|T=MIME-type' (force MIME type)指定MIME类型
'nosubreq|NS' (used only if no internal sub-request)如果是内部子请求则跳过
'nocase|NC' (no case)忽略大小
'qsappend|QSA' (query string append)附加查询字符串
'noescape|NE' (no URI escaping of output)禁止URL中的字符自动转义成%[0-9]+的形式。
'passthrough|PT' (pass through to next handler)将重写结果运用于mod_alias
'skip|S=num' (skip next rule(s))跳过下面几个规则
'env|E=VAR:VAL' (set environment variable)添加环境变量

实际操作

例子:
RewriteEngine on
RewriteCond %{HTTP_USER_AGENT} ^MSIE [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^Opera [NC]
RewriteRule ^.* - [F,L] 这里”-”表示没有替换,浏览器为IE和Opera的访客将被禁止访问。

例子:
RewriteEngine On
RewriteBase /test
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ([^/]+)$ /test/$1.php
#for example: /test/admin => /test/admin.php
RewriteRule ([^/]+)/.html$ /test/$1.php [L]
#for example: /test/admin.html => /test/admin.php

限制目录只能显示图片
< IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !^.*/.(gif|jpg|jpeg|png|swf)$
RewriteRule .*$ - [F,L]
< /IfModule>

分享到:
评论

相关推荐

    mac 下 drupal .htaccess配置文件

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

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

    Apache的.htaccess文件是配置文件,用于控制Apache服务器的行为,包括URL重写规则。这些规则通常包含在.htaccess文件中,该文件位于网站的根目录或子目录下,可以对特定的目录应用规则。 然而,IIS默认并不支持....

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

    Apache 的.htaccess 文件是一种基于目录的配置文件,可以对特定的目录或子目录进行配置。通过修改 Apache 的配置文件 httpd.conf,可以开启.htaccess 文件的使用。下面将详细介绍如何开启.htaccess 文件的使用方法...

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

    .htaccess 文件是 Apache 服务器中的一种配置文件,用于实现 URL 重写、访问控制、缓存设置等功能。然而,Nginx 不支持原生的 .htaccess 文件,因此需要使用其他方法来实现 URL 重写。 本文将介绍 Nginx 支持 ....

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

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

    .htaccess_配置文件详解

    设置网站路径,文件属性,页面404,403,以及域名重定向,

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

    `.htaccess` 文件是 Apache 服务器配置中一个非常重要的文件,它允许我们在网站根目录下进行站点级别的配置,而无需直接修改服务器的主配置文件。`.htaccess` 文件的使用可以极大地方便网站管理和优化,比如实现URL...

    解析 .htaccess 文件 apache rewrite

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

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

    `.htaccess` 是 Apache 服务器中的一种配置文件,允许我们在特定的目录级别上自定义网页配置,包括 URL 重写规则。这使得我们可以对 URL 进行美化,使其看起来更加直观和用户友好。 在 ThinkPHP 框架中,由于采用...

    使Nginx服务器支持.htaccess的方法

    可能很多朋友都常用nginx不支持.htaccess,只有apache才支持.htaccess文件,其实这是错误的看法nginx也是支持.hatccess的哦,下面我来给各位总结一下配置方法。 其实nginx和.htaccess一点关系都没有,只是一大堆人...

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

    1. .htaccess 文件的作用:.htaccess 文件允许用户在网站的根目录下进行配置,无需对整个服务器的配置文件进行修改,增加了灵活性和安全性。 2. 常见功能: - URL 重写:通过 RewriteEngine 和 RewriteRule 指令...

    中国和香港IP禁止访问.htaccess

    有外贸需求,需要防止爬虫,像中国和香港的IP,使禁止访问.htaccess,不是非常全,有一些作用,希望能给到大家帮助

    .htaccess设置指南经典说明

    启用 `.htaccess` 功能需要在服务器配置中通过 `AllowOverride` 指令指定哪些配置指令可以在 `.htaccess` 文件中使用。例如,若要允许 URL 重写,需要在主配置文件中设置 `AllowOverride FileInfo`。 使用场景: ...

    php 页面重定向 通过.htaccess 定制404错误页面

    这是一个用于配置Apache服务器的配置文件,允许我们在不修改服务器主配置的情况下进行一系列操作,如URL重写、限制访问、设置自定义错误页面等。要使用`.htaccess`实现重定向,可以添加如下代码: ```apacheconf ...

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

    Apache Web服务器的`.htaccess`文件是一个非常重要的配置文件,它允许用户在不修改服务器主配置的情况下,对网站进行各种自定义设置。这篇文章主要介绍了如何使用`.htaccess`文件实现一系列功能,包括阻止特定IP或...

    BBS下普通.htaccess.zip

    .htaccess 文件,全称为 Hypertext Access,是Apache Web服务器配置中的一个非常重要的文件,它允许用户通过放置在网站根目录或者子目录下,来实现对服务器行为的部分控制,无需直接编辑主服务器配置。这种分布式...

    .htaccess使用方法总结.docx

    `.htaccess` 文件是Apache服务器配置中的一个关键文件,它允许你在不修改主服务器配置的情况下进行分布式配置。这篇文档总结了`.htaccess`文件的主要用途和常见操作。 首先,`.htaccess`文件主要功能在于提供一种...

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

    在Google上搜索的资料很多人都说nginx目前不支持.htaccess文件,我按照nginx的规则试验了一下,结果发现nginx是完全支持.htaccess文件的! 方法如下: 1. 在需要使用.htaccess文件的目录下新建一个.htaccess文件, ...

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

    首先,.htaccess文件的主要作用是当用户无法直接编辑服务器的主配置文件httpd.conf时,提供了一种在目录级别进行配置的方法。例如,它能用来控制目录访问权限、URL重写、错误页面定制等。然而,如果服务器未正确配置...

    htaccess_Editor HTACCESS编辑器

    `.htaccess`(分布式配置文件)是Apache服务器配置的一部分,允许我们在网站的根目录下进行特定的设置,而无需直接修改主服务器配置。对于许多网站管理员和开发者来说,`htaccess_Editor`或`.htaccess Online Editor...

Global site tag (gtag.js) - Google Analytics