Apache的htaccess文件出现500错误的原因

Apache 我平时很少用到,今天测试环境下碰到个问题,老是500错误莫名其妙

  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteRule ^m/(.*)$ m.php/$1 [L]
  RewriteRule ^(.*)$ index.php/$1 [L]

一开始这么些,感觉应该是正常的逻辑吧,m/ 开头的都到 m.php 去然后终止,其他为匹配到 m 的则去 index.php,结果发现直接500错误,崩溃怎么改都不行。

然后郁闷的查看日志发现提示貌似重写进入死循环了。。。很是奇怪,感觉应该是规则的正则范围有问题

AH00124: Request exceeded the limit of 10 internal redirects due to probable configuration error. Use ‘LimitInternalRecursion’ to increase the limit if necessary. Use ‘LogLevel debug’ to get a backtrace.

换了个新写法

  RewriteCond %{REQUEST_URI} ^/m/
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteRule ^m/(.*)$ m.php/$1 [L]

  RewriteCond %{REQUEST_URI} !^/m/
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteRule ^(.*)$ index.php/$1 [L]

分成了两部分,增加个 URI 的匹配条件,明确分为两种条件,
即:
1. 以 /m/ 开头
2. 不是以 /m/ 开头的

这样明确正则范围终于ok了,

结论,貌似 Apache 的 RewriteRule 中的正则规则是不能存在一条包含另一条的情况,必须每个规则明确,否则就会出现死循环或者正则递归过大的情况导致500错误

附一个apache 规则转换到 nginx 的工具地址:
http://www.anilcetin.com/convert-apache-htaccess-to-nginx/

时间: 2024-12-30 16:43:46

Apache的htaccess文件出现500错误的原因的相关文章

详解Apache中.htaccess文件的功能写法

apache中.htaccess文件的功能写法 - .htaccess文件(或者"分布式配置文件"提供了针对目录改变配置的方法, 即,在一个特定的文档目录中放置一个包含一个或多个指令的文件, 以作用于此目录及其所有子目录.作为用户,所能使用的命令受到限制.管理员可以通过Apache的AllowOverride指令来设置. - 子目录中的指令会覆盖更高级目录或者主服务器配置文件中的指令. - .htaccess必须以ASCII模式上传,最好将其权限设置为644. 错误文档的定位 常用的客

Apache指南: .htaccess文件使用手册

因为在一个国外的空间的根文件夹下看到这个.htaccess,搞不懂是干什么的,在落伍论坛找到一篇文章,先转过来放着,以后再慢慢研究,嘿嘿..      Apache指南: .htaccess文件  .htaccess文件提供了针对目录改变配置的方法.    * .htaccess文件    * 工作原理和使用方法    * 使用.htaccess文件的场合    * 指令的生效    * 认证举例    * 服务器端包含举例    * CGI举例    * 疑难解答  top  .htacces

PHP基础:详解Apache中.htaccess文件的功能写法

apache中.htaccess文件的功能写法 - .htaccess文件(或者"分布式配置文件"提供了针对目录改变配置的方法, 即,在一个特定的文档目录中放置一个包含一个或多个指令的文件, 以作用于此目录及其所有子目录.作为用户,所能使用的命令受到限制.管理员可以通过Apache的AllowOverride指令来设置. - 子目录中的指令会覆盖更高级目录或者主服务器配置文件中的指令. - .htaccess必须以ASCII模式上传,最好将其权限设置为644. 错误文档的定位 常用的客

apache的htaccess文件语法详解

Apache系统中的.htaccess文件(也称"分布式配置文件")提供了针对目录改变配置的方法,也就是在一个特定的文档目录中放置一个包含指令的文件, 以作用于此目录及其所有子目录.直白的说,.htaccess文件只是一个简单的文档,可以在里面加些简单的命令实现各种不同的设置. 如何知道主机是否支持.htaccess? 其实大部分主机都支持.htaccess,但实际上你的主机提供商并不会特别声明.一般来说,如果你的主机使用Unix或Linux系统,或任何版本的Apache网络服务器,理

apache中.htaccess文件的功能写法

access|apache - .htaccess文件(或者"分布式配置文件"提供了针对目录改变配置的方法, 即,在一个特定的文档目录中放置一个包含一个或多个指令的文件, 以作用于此目录及其所有子目录.作为用户,所能使用的命令受到限制.管理员可以通过Apache的AllowOverride指令来设置.  - 子目录中的指令会覆盖更高级目录或者主服务器配置文件中的指令.  - .htaccess必须以ASCII模式上传,最好将其权限设置为644.  错误文档的定位  常用的客户端请求错误

详解Apache下.htaccess文件常用配置

.htaccess文件是Apache服务器中最常用的一个配置文件,它负责相关目录下的网页配置.通过htaccess文件,可以帮我们实现:网页301重定向.自定义404错误页面.改变文件扩展名.允许/阻止特定的用户或者目录的访问.禁止目录列表.配置索引入口等功能. 另外,.htaccess手动编辑方法是使用UE或notepad2等高级文本编辑器.如果不方便下载或手动编写的文件出错,也非常推荐在线htaccess文本编辑器,目前这款编辑器已经非常完善,并且在二次开发下已经增加了很多新功能,简单易用,

Apache 中 .htaccess 文件设置技巧16则

.htaccess 文件 (Hypertext Access file) 是Apache Web服务器的一个非常强大的配置文件,对于这个文件,Apache有一堆参数可以让你配置出几乎随心所欲的功能..htaccess 配置文件坚持了Unix的一个文化--使用一个ASCII 的纯文本文件来配置你的网站的访问策略. 这篇文章包括了16个非常有用的小技巧.另外,因为.htaccess 是一个相当强大的配置文件,所以,一个轻微的语法错误会造成你整个网站的故障,所以,在你修改或是替换原有的文件时,一定要备

总结新手容易犯的htaccess文件五大优化错误

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 由于本人最近一直在研究Apache的官方手册,对.htaccess这个强大而灵活的配置文件产生了兴趣.同时,也有很多朋友向我询问.htaccess文件的相关疑难杂症,在此,我独家总结一下.htaccess这个文件的常见编写错误,也希望各位朋友能够汲取教训,达到更高的层次. 1..htaccess文件是Apache的配置文件,因此直接决定了此文

Apache中.htaccess文件功能_Linux

作为用户,所能使用的命令受到限制.管理员可以通过Apache 的AllowOverride指令来设置.子目录中的指令会覆盖更高级目录或者主服务器配置文件中的指令. 一.错误文档的定位 (1)常用的客户端请求错误返回代码: 401 Authorization Required 403 Forbidden 404 Not Found 405 Method Not Allowed 408 Request Timed Out 411 Content Length Required 412 Precond