自建MVC模型下的.htaccess URL重写问题求助
解决.htaccess重写"No input file specified"问题
我来帮你排查并解决这个问题,先分析一下你遇到的问题根源,再给出修正后的规则:
错误原因分析
- RewriteBase设置错误:你的.htaccess放在根目录,但你写了
RewriteBase /admin/,这会导致重写路径的基准被错误指向admin目录,和你想要的根目录伪静态URL不匹配。 - 目标文件路径指向错误:你要重写的目标是
admin/index.php,但原来的规则里用了相对路径,在根目录的.htaccess下需要明确写出完整的相对路径(从根目录出发)。 - PHP PATH_INFO解析问题:"No input file specified"是PHP在CGI/FastCGI模式下常见的错误,通常是因为PATH_INFO传递时没有正确处理,需要在重写规则末尾加
?或者使用QSA标志来修正。
修正后的.htaccess规则
RewriteEngine On RewriteBase / # 排除实际存在的文件和目录,避免不必要的重写 RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d # 匹配 /24/33/ 或 /24/33 格式,重写到目标地址 RewriteRule ^([^/]+)/([^/]+)/?$ admin/index.php/Frontend/show?request[id]=$1&request[lang]=$2 [L,QSA] # 处理只有ID的情况,比如 /24/ 或 /24 RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^([^/]+)/?$ admin/index.php/Frontend/show?request[id]=$1 [L,QSA]
关键调整说明
- RewriteBase /:因为.htaccess在根目录,基准路径设为网站根目录,确保路径解析正确。
- 目标路径改为admin/index.php:明确指向admin目录下的index.php文件,避免路径混乱。
- 末尾的/?:允许URL末尾带或不带斜杠,提升用户体验。
- [L,QSA]标志:
L表示这是最后一条规则,匹配后停止后续处理;QSA表示保留原URL的查询字符串(如果有的话),同时解决PATH_INFO解析问题。另外,规则末尾的?也可以辅助解决"No input file specified"问题。
额外检查点
- 确认你的服务器已经启用了
mod_rewrite模块(可以通过phpinfo()查看)。 - 确保根目录的.htaccess文件权限正确(通常设置为644),服务器能读取它。
- 验证
/admin/index.php/Frontend/show?request[id]=24&request[lang]=33这个原始URL能正常访问,排除PHP程序本身的问题。
内容的提问来源于stack exchange,提问作者rasslstudio
相关产品推荐
相关产品推荐

