Apache mod_rewrite规则问题

时间:2010-01-14 11:04:25

标签: mod-rewrite

domain.com/index/ 至 domain.com/index.php

domain.com/index/hello 至 domain.com/index.php/hello

该网站使用path_info,默认规则不起作用:

RewriteRule ^([^/]+)/(.*)$      $1.php/$2   [L]

我改为:RewriteRule ^([^/.]+)((/[^/]+)*)/?$ $1.php$2 [L]

那很奇怪

domain.com/index/到domain.com/index.php 正常运行

domain.com/index/hello到domain.com/index.php/hello 无效

它表示未指定输入文件。

Php在apache中以快速cgi模式运行

4 个答案:

答案 0 :(得分:0)

我认为应该是:

RewriteRule ^([^/]+)/(.*)?$      $1.php/$2   [L]

所以第二组是可选的。

另外,我建议你不要使用url中传递的变量来匹配文件,这可能会导致安全问题。

答案 1 :(得分:0)

显然,你的正则表达式需要转义/。试试这个:

RewriteRule ^([^\/]+)\/(.*)$      $1.php/$2   [L]

答案 2 :(得分:0)

I change to: RewriteRule ^([^/.]+)((/[^/]+)*)/?$ $1.php$2 [L] 

那很奇怪

domain.com/index/到domain.com/index.php工作正常

domain.com/index/hello到domain.com/index.php/hello无法正常工作

它表示未指定输入文件。

答案 3 :(得分:0)

您需要排除以.php结尾的匹配项:

RewriteCond $1 !.+\.php$
RewriteRule ^([^/]+)/(.*)$      $1.php/$2   [L]

否则/index.php/hello也会被重写为/index.php.php/hello,并且会被重写为/index.php.php.php/hello并且......