Apache伪静态出现页面无法正常访问处理(1)
-
默认规则:
apacheRewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]
- 这条规则适用于Apache采用模块化运行方式的情况。
- 当请求URL不是目录或文件时,将所有请求重写为
index.php/$1
。
-
备用规则:
apacheRewriteRule ^(.*)$ index.php [E=PATH_INFO:$1,QSA,PT,L]
- 这条规则适用于Apache采用FastCGI运行方式的情况。
- 当请求URL不是目录或文件时,将所有请求重写为
index.php
,并将路径信息存储在PATH_INFO
变量中。
为什么会出现“No input file specified.”
-
模块化运行方式:
- Apache默认采用模块化运行方式(mod_php),在这种模式下,可以直接处理PHP脚本。
- 默认规则适用于这种情况。
-
FastCGI运行方式:
- 当Apache采用FastCGI模式运行PHP时,需要通过FastCGI接口与PHP通信。
- FastCGI模式下,
PATH_INFO
变量需要传递给PHP脚本,否则会出现“No input file specified.”错误。
解决方案
1. 检查Apache运行模式
- 确认Apache运行模式:
- 查看Apache的
httpd.conf
或php.ini
配置文件,确认Apache是否采用FastCGI模式运行PHP。 - 如果使用FastCGI模式,需要启用备用规则。
- 查看Apache的
2. 修改伪静态规则
- 启用备用规则:
- 注释掉默认规则: apache
# RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]
- 启用备用规则: apache
RewriteRule ^(.*)$ index.php [E=PATH_INFO:$1,QSA,PT,L]
- 注释掉默认规则: