使用PHP内置Web服务器无法访问Processwire后台的解决方法咨询
解决PHP内置服务器运行ProcessWire的路由问题
我之前也碰到过一模一样的情况——PHP内置Web服务器本身不支持Apache的.htaccess重写规则,所以得手动写路由脚本模拟ProcessWire的URL解析逻辑,尤其是后台/admin路径的独立入口处理。试试下面的步骤:
1. 创建正确的路由脚本
在你的ProcessWire项目根目录下新建一个router.php文件,写入以下代码:
<?php // 指向ProcessWire前端主入口文件 $pwFrontendIndex = __DIR__ . '/index.php'; // 获取当前请求的URI $requestUri = $_SERVER['REQUEST_URI']; // 优先处理后台/admin路径(ProcessWire后台是独立入口) if (strpos($requestUri, '/admin') === 0) { $_SERVER['SCRIPT_NAME'] = '/admin/index.php'; include __DIR__ . '/admin/index.php'; exit; } // 处理静态资源(CSS、JS、图片等) if (file_exists(__DIR__ . $requestUri)) { // 如果是实际存在的文件/目录,让PHP内置服务器直接返回 return false; } else { // 所有动态请求交给ProcessWire主入口处理 include $pwFrontendIndex; exit; }
2. 用路由脚本启动PHP服务器
在Cloud9的终端里进入项目根目录,执行以下命令启动服务器:
php -S 0.0.0.0:8080 router.php
这里0.0.0.0是为了让Cloud9的外部预览能正常访问,端口8080是Cloud9常用的默认端口,如果你环境有特殊要求可以改成其他端口。
3. 关键检查项
- 确认ProcessWire的
site/config.php里$config->urls->admin的值是'/admin',和你设置的后台路径完全一致 - 检查
admin目录下的index.php文件是否存在,且权限正常(一般设为644即可) - 如果还是访问不了后台,可以在
router.php里加一行var_dump($requestUri); exit;,看看请求的URI是否正确被捕获,排查路径匹配问题
之前你尝试的路由脚本大概率没单独处理/admin的独立入口——ProcessWire的后台和前端是分开的入口文件,不能直接交给主index.php处理,这是很多人踩坑的点。按上面的步骤来应该就能解决问题了。
内容的提问来源于stack exchange,提问作者Mike Thrussell
相关产品推荐
相关产品推荐

