.htaccess 文件

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]
</IfModule>

http://localhost/Application/Home/Index/index/url/http%3A%2F%2Fwww.domain.com%2Fpage%2F

当访问上面链接时,老是出现 404,重写失效了

http://localhost/Application/Home/Index/index/url/http://www.domain.com/page/

我本地环境一直使用的 xampp ,服务器上的 nginx 没有问题,但 apache 却很让人无语,老是 404,换成原样,不经过 urlencode 反而能正常打开页面

网上搜索了半天,终于找到原因:

当URL和PATH_INFO中出现%2f(/)或者%5c(\), 会被认为这是个不合法的请求, Apache将会直接返回"404 (Not Found)"错误。

也就是说,Apache在调用 mod_proxy 或 mod_rewrite 模块之前,就直接拒绝请求,给出404错误。

这样做主要是为了防止CGI的安全漏洞发生,尤其是在脚本中使用了PATH_INFO但是又没有做安全过滤操作的话,很容易被注入漏洞。

解决办法有两个,第一个比较简单,但需要有服务器操作的权限:

一、修改站点虚拟目录的配置

<VirtualHost *:80>
AllowEncodedSlashes On
DocumentRoot "D:/htdocs/localhost"
ServerName localhost
</VirtualHost>

配置中增加 AllowEncodedSlashes On 这句话后重启服务即可

二、多次 urlencode 

可以将链接多次 urlencode ,一般两次,或者三次就不会有问题了。

我做了个测试,发现必须要三次才能成功

http://localhost/Application/Home/Index/index/url/http%25253A%25252F%25252Fwww.domain.com%25252Fpage%25252F

感觉这个方法不太实用,改动太大了

Apache 关于 mod_rewrite 遇到 %2F或%5C (正反斜杠)等特殊符号导致URL重写失效出现404的问题的更多相关文章

  1. 【转】Apache 关于 mod_rewrite 遇到 %2F或%5C (正反斜杠)等特殊符号导致URL重写失效出现404的问题

    .htaccess 文件 <IfModule mod_rewrite.c> RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-d Rew ...

  2. 【本地资源路径&&网络资源路径&&正反斜杠在Java中的用法】

    一.概念和用法 左正右反 先来看看转义字符的概念:通过 \ ,?来转变后面字母或符号的含义.意思就是改变字母本身的含义. 以"\"符号为例,JAVA中有很多操作,例如文件操作等,需 ...

  3. Ubuntu系统下允许Apache的mod_rewrite功能

    首先,使能apache的rewirte模块,在shell里输入下边的命令: sudo a2enmod rewrite 然后重启一下webserver使更改生效 sudo service apache2 ...

  4. Apache的Mod_rewrite学习(RewriteRule重写规则的语法)

    URL:http://www.tenwe.com/tech/web/server/200705/content_1548.shtml 今天学习重写规则的语法.RewriteRuleSyntax: Re ...

  5. 关于Apache mod_rewrite的中文配置、使用和语法介绍(实现URL重写和防盗链功能)

    以数据库后台驱动的动态内容的网站,经常会遇到这些的问题: 当在浏览器的地址栏输入一个无效的参数时,会出现数据库的错误提示,这是一个安全的隐患 搜索引擎无法收录你的所有网页 网页的链接地址是一系列的参数 ...

  6. Apache 相关 mod_rewrite ,RewriteCond,{HTTP_HOST}

    1.给子域名加www标记  RewriteCond %{HTTP_HOST} ^([a-z.]+)?example\.com$ [NC] RewriteCond %{HTTP_HOST} !^www\ ...

  7. Apache的Mod_rewrite学习(RewriteRule重写规则的语法) 转

    RewriteRuleSyntax: RewriteRule Pattern Substitution [flags] 一条RewriteRule指令,定义一条重写规则,规则间的顺序非常重要.对Apa ...

  8. 利用apache的mod_rewrite做URL规则重写

    使用mod_rewrite做url重写,伪静态,做过很多次,这次用几个例子记下来,便于后面查用. 使用方法: 1.在conf目录的httpd.conf文件中找到: LoadModule rewrite ...

  9. Apache伪静态在网站目录没有反斜杠后自动添加反斜杠

    第一步:确认网站开启REWRITE规则 一般有两种情况: i.apache安装的时候已经包含rewrite功能 ii.后续配置的时候新添加mod_rewrite.so.这种情况需要在httpd.con ...

随机推荐

  1. web 安全知识

    目录 背景最简单的 Web 物理架构攻击方式总览Web 软件安全攻击防护浏览器安全攻击Cookie 假冒隐藏变量修改跨站脚本攻击服务器安全攻击缓冲区溢出认证逃避非法输入授权逃避SQL 注入异常敏感信息 ...

  2. HTTP报文格式详解

    HTTP报文是面向文本的,报文中的每一个字段都是一些ASCII码串,各个字段的长度是不确定的.HTTP有两类报文:请求报文和响应报文. HTTP请求报文 一个HTTP请求报文由请求行(request ...

  3. JS之For---in 语句

    下面说一下for… in语句.可直接把下面的代码复制到浏览器的控制台或Node环境下去执行. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ //用来快速迭代对象. var o ...

  4. IP选路

    IP选路 1.概述      路由算法是用于获取路由表中的路由项目.它是路由选择协议的核心. 2.路由算法的分类      从路由算法能否随网络的通信量或拓扑自适应的进行调整变化来分,可以分为两类. ...

  5. JAVA小知识点-Finally和Return的执行关系

    如果Try和Catch中存在return语句的时候Finally内的语句是否会执行,执行的时候对结果又有什么影响呢?我写了个例子来试验这个问题: public static Map<String ...

  6. MBR,boot loader, partition table, backup, recovery, clean 硬盘引导记录,分区表备份,恢复,清空

    linux/unix系统的分区表结构位于硬盘开始的MBR上.MBR上大小为512bytes. MBR=446B启动信息+64B分区表+2B分隔符=512字节 前面的446bytes作为启动信息,启动信 ...

  7. TOGAF架构内容框架之架构交付物

    TOGAF架构内容框架之架构交付物 3. 架构交付物(Architecture Deliverables) 架构交付物是在整个架构开发方法循环过程中所产生或被使用的契约性且正规化的企业架构内容,因而其 ...

  8. C++中const用法详解

    本文主要内容来自CSDN论坛: http://bbs.csdn.net/topics/310007610 我做了下面几点补充. 补充: 1. 用const声明全局变量时, 该变量仅在本文件内可见, 类 ...

  9. 设置session超时

    在web应用中,设置session超时有三种方法: 1.在web.xml文件中配置:单位是分钟,范围是针对本项目所有用户的session <session-config> <sess ...

  10. 结构-行为-样式-angularJs笔记

    0.关于Ng-app   通过ngApp指令来引导Angularjs应用是一种简洁的方式 ,适合大多数情况.在高级开发中,例如使用脚本装载应用,您也可以使用Bootstrap手动引导AngularJs ...