zoukankan      html  css  js  c++  java
  • .htaccess文件

    前言

    看了几篇文章,发现自己对于如何维护普通的服务器安全完全不会,先从简单的.htaccess来研究吧

    .htaccess文件的作用,就是更改httpd.ini文件中的配置,但作用范围仅限当前文件夹

    在使用.htaccess文件之前确认httpd.ini文件中AllowOverride All是否存在

    .htaccess中不区分大小写

    配置

    访问控制

    在实施访问控制时,最简单的访问控制就是

    deny from all
    

    禁止所有用户在url中访问该文件夹(包括子文件夹)

    但是实际上总不可能全部都禁止(至少要让自己访问吧),总要允许一些主机访问,所以这时就需要使用allow

    allow from 127.0.0.1
    deny from all
    

    实际使用中还可能会使用order,来指定allow和deny的顺序

    例:

    Order allow,deny
    allow from 127.0.0.1
    deny from all
    

    表示先进行allow操作,在进行deny操作,这就导致所有的用户都会被禁止

    Order deny,allow
    allow from 127.0.0.1
    deny from all
    

    则会先使用deny,在进行allow操作,这就使得可以通过127.0.0.1来访问

    当然也可以使用域名来替代ip

    Order allow,deny
    allow from .*domain.com.*
    deny from all
    

    通过allow,deny和order的设置则可以进行控制访问

    文件访问限制

    有些时候需要对一些文件进行限制,使其不能让所有人都能访问

    <files 1.txt>
    order deny,allow
    deny from all
    allow from 127.0.0.1
    </files>
    

    限制其只能通过127.0.0.1访问

    当然,支持通配符

    <files *.txt>
    order deny,allow
    deny from all
    allow from 127.0.0.1
    </files>
    
    <files [1-2].txt>
    order deny,allow
    deny from all
    allow from 127.0.0.1
    </files>
    

    但是这样并不能对文件类型进行限制,所以,我们可以使用

    <filesmatch ".txt$">
    order deny,allow
    deny from all
    allow from 127.0.0.1
    </filesmatch>
    

    来正则匹配文件类型,总而达到禁止访问的目的

    任意目录浏览

    虽然说任意目录浏览可能会造成一系列的问题,但是有时候我们又不得不开启这项功能(比如列举所有的文件以供下载时)

    开启

    options all +indexes
    

    禁用

    options all -indexes
    

    indexignore *
    

    如果我们只想提供一部分文件下载呢?

    options all +indexes
    indexignore *.php
    

    不提供php文件

    定义首页文件

    如果在不同的文件夹中存在不同文件名的文件,而我们又想将他们全部作为首页文件,那么可以这样写

    directoryindex index222.html333
    

    配置错误文件

    访问各大站的页面,发现其404页面都有所不同,当然框架内部的实现不去考虑,仅是单纯从apache的层次实现

    其实很简单

    errordocument 404 /404.html
    

    url重写

    有时候我们不想让别人知道我们服务器后端脚本的类型,想将其隐藏起来,我们可以使用静态的url,或者使用restful风格的url

    当然,这里只是实现简单的静态解析

    比如,访问index就相当于访问index.php

    RewriteEngine On
    RewriteRule ^(w+)$ $1.php
    

    这样就隐藏了后缀名

    重定向

    如果想实现域名重定向,则可以这样

    RewriteEngine On
    RewriteRule ^(w+)$ $1.php [r]
    

    实现301跳转

    RewriteEngine On
    RewriteRule ^(w+)$ $1.php [r=301]
    

    实现302跳转

    RewriteEngine On
    RewriteRule ^(w+)$ $1.php [r=302]
    

    当然,跳转时也可以定义基准目录(基于网站根目录)

    rewriteengine on
    rewritebase /
    RewriteRule ^(w+)$ $1.php
    

    实现静态URL

    当访问127.0.0.1/index/info/1时就相当于访问127.0.0.1/index.php?info=1

    rewriteengine on
    RewriteRule ^(w+)/(w+)/(w+)/$ $1.php?$2=$3
    

    正则表达式

    rewrite中可以使用正则表达式来进行匹配

    [F] 使得服务器返回403
    
    [L] 表示当前是最后一条规则,匹配完后停止重写
    
    [NC] 表示当前规则中不区分大小写
    
    [QSA] 如果加上了[qsa]了那么表示会将请求中的?转换为&
    

    参考链接

    https://lesca.me/archives/htaccess-basic.html

    http://lesca.me/archives/htaccess-appendix.html#htaccess_regex

    http://lesca.me/archives/htaccess-rewrite.html

  • 相关阅读:
    Android开发环境搭建全程演示(jdk+eclip+android sdk)
    mysql UDF接口 网络编程(代码改进版非阻塞,超时重传)
    HTTP_POST———使用mysql_udf与curl库完成http_post通信模块(mysql_udf,multi_curl,http,post)
    Linux自动更新时间
    CentOS下设置Mysql的root密码
    CentOS yum安装LAMP环境
    Nagios远程监控软件的安装与配置详解
    Android开发之旅:环境搭建及HelloWorld
    CentOS 6.3安装配置LAMP服务器(Apache+PHP5+MySQL)
    c#,winform,show,showdialog,子窗体,父窗体,传值,输入正确
  • 原文地址:https://www.cnblogs.com/hf99/p/9962859.html
Copyright © 2011-2022 走看看