【问题标题】:PHP - .htaccess issue $_SERVER['PATH_INFO'] is emptyPHP - .htaccess 问题 $_SERVER['PATH_INFO'] 为空
【发布时间】: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


【解决方案1】:

于是我找到了解决方案here。我已将我的index.php 更改如下:

$url = isset($_SERVER['REQUEST_URI']) ? explode('/', ltrim($_SERVER['REQUEST_URI'], '/')) : [];
 // Route the request
 Router::route($url);

...现在它按预期工作了:)。

【讨论】:

    猜你喜欢
    • 2023-03-08
    • 1970-01-01
    • 2016-12-31
    • 2019-07-03
    • 1970-01-01
    • 2014-04-03
    • 2010-10-11
    • 2011-05-29
    • 1970-01-01
    相关资源
    最近更新 更多