Apache 关于 mod_rewrite 遇到 %2F或%5C (正反斜杠)等特殊符号导致URL重写失效出现404的问题
来源:互联网 发布:java 数据类型 double 编辑:程序博客网 时间:2024/05/24 02:44
.htaccess 文件
<IfModule mod_rewrite.c> RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]</IfModule>
当访问上面链接时,老是出现 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的问题
- 正反斜杠的问题
- Apache Mod_Rewrite实现URL重写的配置方法
- Apache Mod_Rewrite实现URL重写的配置方法
- Apache Mod_Rewrite实现URL重写的配置方法
- Apache Mod_Rewrite实现URL重写的配置方法
- Apache url 重写/静态化/mod_rewrite
- apache配置mod_rewrite url重写相关
- 关于Apache mod_rewrite的中文配置、使用和语法介绍(实现URL重写和防盗链功能)
- 关于Apache mod_rewrite的中文配置、使用和语法介绍(实现URL重写和防盗链功能)
- 关于Apache mod_rewrite的中文配置、使用和语法介绍(实现URL重写和防盗链功能
- 关于apache的url 重写
- 正反斜杠问题
- Apache mod_rewrite规则重写的标志一览
- 正反斜杠的匹配
- 正反斜杠的区别
- 关于Apache的mod_rewrite模块
- Apache模块 mod_rewrite 及 初级URL重写指南
- C语言实现组合数学 邻位互换生成算法
- Linux 系统下MySQL忘记root密码解决办法
- mr任务之从多个Hbase表中读取数据进行处理
- 多线程的单元测试
- mysql的远程数据库连接
- Apache 关于 mod_rewrite 遇到 %2F或%5C (正反斜杠)等特殊符号导致URL重写失效出现404的问题
- 如何实现全选按钮和多选按钮
- inet_pton()函数,编译运行提示段错误
- C/ C++字符串的各种转换
- Hbase访问方式之Mapreduce
- INIT_WORK和INIT_DELAYED_WORK详解
- Mac Android Studio 快捷键
- 黑马程序员——Java集合
- python super