php $ SERVER ['PATH_INFO']和apache mod_rewrite

时间:2011-12-13 22:53:44

标签: php apache mod-rewrite pathinfo

这里我有.htaccess文件:

Options +FollowSymLinks

RewriteEngine on

RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule .* index.php [QSA,L]

重写是有效的,但是当我尝试http://site.com/example时,我的index.php中没有path_info。

我对此主题https://stackoverflow.com/questions/1442854/codeigniter-problem-with-mod-rewrite-on-apache-1-3有所了解,但它并没有解决我的问题。

所以,这个问题只发生在apache 1.3上(在2.0上都可以),我想知道原因。遗憾的是,我无法访问httpd.conf(

请帮帮我。

3 个答案:

答案 0 :(得分:3)

尝试将重写规则更改为:

RewriteRule (.*) index.php [QSA,L,E=PATH_INFO:/$1]

答案 1 :(得分:1)

这与mod_negotiation相关,并且可以/index.php作为/index访问(不含扩展名)。

解决方案:

a2dismod negotiation

service apache2 restart

答案 2 :(得分:0)

PATH_INFO是真正的CGI可执行文件/ PHP脚本文件名之后的虚拟路径后缀 您需要传递一个才能看到它:

RewriteRule (.*) index.php/$1 [QSA,L]

请注意,您还可能需要先启用该选项:http://httpd.apache.org/docs/2.2/mod/core.html#acceptpathinfo

AcceptPathInfo On

然后根据PHP SAPI,您可能必须配置php.ini,关于--cgi-force-redirect设置(旨在避免某些设置的PATH_INFO漏洞利用)。 http://php.net/manual/en/security.cgi-bin.php