apache RewriteEngine Your browser sent a request that this server could not understand

http://www.rainleaves.com/html/1569.html

在httpd.conf中设置%{REQUEST_FILENAME} !-f无效解决方法

今天在调试一个think php的框架,我本地的服务器不支持跟目录下.htaccess文件的RewriteRule,于是我就将.htaccess的内容拷贝到httpd.conf中进行配置,但配置后发现提示错误。

Bad Request
Your browser sent a request that this server could not understand.

.htaccess中的配置如下

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

猜测可能是有绝对路径原因到只无效,于是配置改成:

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ /index.php/$1 [QSA,PT,L] #index.php前面加了一斜杠

加上跟目录斜杠以后,页面能访问,但新的问题又出现了,页面中所有的js、css、图片的地址都被转向到了错误页面上。可我明明在配置中已经说明了,如果文件或者目录存在则不执行RewriteRule。代码如下:

#此两行代码含义:如果文件存在,就直接访问文件,不进行下面的RewriteRule.
RewriteCond %{REQUEST_FILENAME} !-d #如果目录存在就直接访问,不进行RewriteRule
RewriteCond %{REQUEST_FILENAME} !-f #如果文件存在就直接访问,不进行RewriteRule

也可以写这个:

RewriteCond %{REQUEST_FILENAME} !-s #如果文件存在并有大小,直接访问。不进行RewriteRule

当然还可以通过文件的后缀名来过滤

RewriteCond %{REQUEST_URI} !^.*(.css|.js|.gif|.png|.jpg|.jpeg)$ #这些后缀的文件,不进行RewriteRule

以上方法中,测试发现,除了最后通过后缀名来过滤来过滤的以外都无效,可通过后缀名来过滤并不是我的初衷,通过查看RewriteLog日志发现(通过在http.conf文件添加RewriteLog logs/rewrite.log来开启RewriteLog日志),同样是因为相对路径问题而导致的错误,于是在配置的时候加上文档的根目录。修改为如下配置:

RewriteEngine on
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} !-d
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ /index.php/$1

测试成功!

总结,编写Rewrite配置的时候,在http.conf文件里面和在.htaccess文件里面是有区别的,需要注意路径问题,使用.htaccess是以.htaccess文件所在的目录为起始目录,而在http.conf中编写配置是,一定要加上文档的根目录,如“/”、“{DOCUMENT_ROOT}”等…

附录:

RewriteCond 重写规则执行条件:
语法: RewriteCond TestString CondPattern

生效域: server config, virtual host, directory, .htaccess

特别的上面的 TestString, 可提供反向引用. 引用模式为: %N 其中N为(0 <= N <=9), 引用当前若干RewriteCond条件中最后符合的条件中的分组成分, 也就是括号里的内容.不过用到的不多. 反向应用多在RewriteRule里常用.

RewriteCond 语法中的 TestStrng 为要被检查的内容, CondPattern 是进行匹配的规则, 它是一个兼容Perl风格的正则表达式和一些其他的特有字符属性. 这里介绍一下.

第一个: ! (感叹号) 表示否的意思. 比如一个条件: 判断访问此页面的上一页URL是否包含 sex 字符的话可以用这样: RewriteCond %{HTTP_REFERER} !(sex)

第二个: < 就是小于的意思, TestString < CondPattern.

第三个: > 就是大于于的意思, TestString < CondPattern.

第四个: = 相等的意思. <, >, = 三个和通常程序语言使用的 <, >, = 功能类似.

第五个: -d 是否是一个目录. 判断TestString是否不是一个目录可以这样: !-d

第六个: -f 是否是一个文件. 判断TestString是否不是一个文件可以这样: !-f

第七个: -s 是否是一个正常的有大小的文件. 判断TestString是否不是一个正常的有大小的文件可以这样: !-s

第八个: -l 是否是一个快捷方式文件. 判断TestString是否不是一个快捷方式文件可以这样: !-l

第九个: -x 是否是一个文件并且又执行权限. 判断TestString是否不是一个文件并且又执行权限可以这样: !-x

第十个: -F 检查TestString是否是一个合法的文件,而且通过服务器范围内的当前设置的访问控制进行访问。这个检查是通过一个内部subrequest完成的, 因此需要小心使用这个功能以降低服务器的性能。

第十一个: -U 检查TestString是否是一个合法的URL,而且通过服务器范围内的当前设置的访问控制进行访问。这个检查是通过一个内部subrequest完成的, 因此需要小心使用这个功能以降低服务器的性能.

转载请注明本文链接:http://www.rainleaves.com/html/1569.html

ThinkPHP隐藏index.php出现No input file specified的解决方法

因为在Fastcgi模式下,php不支持rewrite的目标网址的PATH_INFO的解析
ThinkPHP运行在URL_MODEL=2时,会出现 No input file specified.的情况,
这时可以修改网站目录的.htaccess文件:
 
RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L] 
改为 RewriteRule ^(.*)$ index.php?s=$1 [QSA,PT,L] 
 
完整的.htaccess代码为:
  1. <IfModule mod_rewrite.c>
    Options +FollowSymlinks
    RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    #RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]
    RewriteRule ^(.*)$ index.php?s=$1 [QSA,PT,L]
    </IfModule>

apache url rewrite问题的更多相关文章

  1. apache url rewrite 的RewriteRule参数详解

    apache url rewrite 的RewriteRule参数详解 我们经常会在apache那边对一些url进行一些重写操作,那么就会涉及到很多的重写策略的选择,比如重定向的方式,参数的处理,规则 ...

  2. Apache URL rewrite 配置

    下面是Apache的配置过程,可以参考下:1.httpd.conf配置文件中加载了mod_rewrite.so模块,使用虚拟主机 #LoadModule rewrite_module modules/ ...

  3. apache url rewrite及正则表达式笔记

    什么是mod_rewrite? mod_rewrite是apache一个允许服务器端对请求url做修改的模块.入端url将和一系列的rule来比对.这些rule包含一个正则表达式以便检测每个特别的模式 ...

  4. nginx和apache下的url rewrite

    将服务器上面的数据同步到本地之后,发现打开首页显示不正常,本地服务器是apache,经过打开url rewrite之后本地首页正常显示. 原因是phpwind本身支持了url rewrite的功能,但 ...

  5. apache开启url rewrite模块

    在把服务器数据转移到本地服务器之后,本地打开首页出现排版紊乱等问题,经过大神指点说是url rewrite的问题. 本篇文章主要写怎样开启apache的url rewrite功能. 打开Apache2 ...

  6. thinkphp nginx php-fpm url rewrite 导致 404 错误

    ## thinkphp nginx php-fpm url rewrite 导致 404 错误 之前thinkphp的系统部署在apache上,考虑到在并发性能nginx比apache强悍得多,所以在 ...

  7. 页面静态化3 --- 伪静态技术之Apache的rewrite机制

      Apache的rewrite机制: 意思就是,你发送的地址,比如:http://localhost/news-id67.html会被Apache改写成http://localhost/news.p ...

  8. Apache的rewrite规则详细介绍

    Apache的rewrite规则详细介绍 发布日期:2008-09-02 16:16 来源: 作者: 点击:7044 rewrite标志 R[=code](force redirect) 强制外部重定 ...

  9. IIS 7.5 使用URL Rewrite模块简单设置网页跳转

    原文 IIS 7.5 使用URL Rewrite模块简单设置网页跳转 我们都知道Apache可以在配置文件里方便的设置针对网页或网站的rewrite,但是最近接手了一组IIS服务器,发现这货简单的没有 ...

随机推荐

  1. UnicodeDecodeError: 'ascii' codec can't decode byte 0xe4 in position 19: ordinal not in range(128)

    解决方案: 1: 在网上找到的解决方案是: 在调用import matplotlib.pyplot as plt前 import sys sys.setdefaultencoding(“gbk”) 让 ...

  2. phpstorm将本地代码传递到远程服务器

    由于对vim不太熟悉,效率比较低,作为过渡阶段,采用本地编写代码,然后上传到开发机上,进行调试 前提是服务器开启了ftp服务:http://www.cnblogs.com/redirect/p/693 ...

  3. Creating Hyperv Agent Installer

    Creating Hyperv Agent Installer   Skip to end of metadata   Created by Anshul Gangwar, last modified ...

  4. win7装python3.6提示api-ms-win-runtime-1-1-0.dll丢失

    win7为MSDN下的旗舰版,没有servicepack1那个,刚开始安装python3.6提示必须得安装servicepack1,于是乎到微软官网下了个900mb大小的安装包. https://ww ...

  5. BugKu-妹子的陌陌

    打开后看这张图片,先放winhex里面,文件头FFD8,是jpg图片.看文件尾并不是FFD9,所以binwalk分析一下. 发现有一个rar文件,然后用foremost分离.发现里面有个加密的rar文 ...

  6. Mac: mac git 的安装 及实现自动补全

    1.检查是否装了brew $ brew list 如果没有,拷贝以下命令到终端 回车.可以安装好brewruby -e "$(curl -fsSL https://raw.githubuse ...

  7. 【转】unity自带寻路Navmesh入门教程(一)

    http://liweizhaolili.blog.163.com/blog/static/16230744201271161310135/ 说明:从今天开始,我阿赵打算写一些简单的教程,方便自己日后 ...

  8. BZOJ3260 跳 【组合数】

    题目 邪教喜欢在各种各样空间内跳.现在,邪教来到了一个二维平面. 在这个平面内,如果邪教当前跳到了(x,y),那么他下一步可以选择跳到以下4个点: (x-1,y),(x+1,y),(x,y-1),(x ...

  9. session失效时间

    1.web容器中设置(此处以tomcat为例) <session-config> <session-timeout>30</session-timeout> < ...

  10. LESS CSS使用方法 , CSS也能跟JS一样玩

    本文转自  http://blog.csdn.net/xuyonghong1122/article/details/51986472 在使用CSS的时候,总会有这个想法 这个属性值老是重复写好烦 这个 ...