【发布时间】:2020-12-20 12:50:54
【问题描述】:
在本地主机上,我在 .htaccess 文件中使用以下规则运行我的 php (MVC) 应用程序:
Options -Indexes
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond $1 !^(config|core|css|js|fonts|images|robots\.txt)
RewriteRule ^(.+)$ index.php/$1 [L]
例如localhost/myapp/register/login 将加载登录页面。
但是在实时服务器上我遇到了问题。我遇到的第一个问题是No input file specified。阅读this answer 我将这一行RewriteRule ^(.+)$ index.php/$1 [L] 更改为RewriteRule ^(.*)$ index.php?/$1 [L]。这解决了第一个问题,但产生了另一个问题,现在无论 url 是什么,它总是加载相同/默认的视图和控制器。
在我的index.php中有如下几行代码:
$url = isset($_SERVER['PATH_INFO']) ? explode('/', ltrim($_SERVER['PATH_INFO'], '/')) : [];
// Route the request
Router::route($url);
所以,我检查了 $_SERVER['PATH_INFO'] 值,它是空的。现在我的问题是为什么它是空的,我怎样才能实现 url 的正常行为。
【问题讨论】:
-
“现在我的问题是为什么它是空的” - 因为你改变了 URL,从一个 有路径信息组件,到一个不。路径信息是 URL path 组件的尾随部分,位于可以与物理现有文件匹配的文件名之后。但是您从 URL 路径中删除了该部分,并将其放入查询字符串中。
标签: php .htaccess model-view-controller url-rewriting