MVC PHP项目中Stripe回调URL指向public外目录的问题求助
问题分析与解决方案
核心问题
线上服务器为了安全,只会对外暴露public目录,你直接把Stripe回调URL指向public外的app目录下的PHP文件,服务器会拦截这类请求,直接跳转到框架默认的index.php。而本地测试因为服务器配置宽松(比如PHP内置服务器、本地Apache/Nginx没限制目录访问),所以能直接访问app下的文件。
解决步骤
1. 配置公开的路由入口
不要直接访问app里的视图文件,而是利用MVC的路由机制,在框架的路由规则里添加两个公开路由:
/payment-success对应支付成功页面/payment-cancel对应支付取消页面
2. 更新Stripe回调URL
把配置改成指向公开路由,而不是app内的文件:
define('STRIPE_SUCCESS_URL', 'https://mywebsite.com/payment-success'); define('STRIPE_CANCEL_URL', 'https://mywebsite.com/payment-cancel');
3. 绑定控制器与视图
创建对应的控制器方法,处理回调逻辑并渲染视图:
// 示例控制器代码(根据你的MVC框架调整) class PaymentController { public function success() { // 可选:验证Stripe回调的合法性(防止伪造请求) // 渲染app/views下的成功视图 $this->view('payment-success'); } public function cancel() { // 处理取消逻辑 $this->view('payment-cancel'); } }
4. 确保服务器路由规则正确
- Nginx配置(确保请求都转发到public/index.php):
location / { try_files $uri $uri/ /index.php?$query_string; }
- Apache配置(public目录下的.htaccess文件):
RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php/$1 [L]
内容的提问来源于stack exchange,提问作者Leigh Harvey
相关产品推荐
相关产品推荐

