PHP 7.1 路由问题

Posted

技术标签:

【中文标题】PHP 7.1 路由问题【英文标题】:PHP 7.1 routing problems 【发布时间】:2018-03-15 00:33:08 【问题描述】:

我是 apache2 和 php 的新手,因为几天以来我试图找出我的代码或服务器配置有什么问题。 当我运行一条简单的线路时,例如:

$uri = $_REQUEST['URI'];
echo("$uri");

我收到一个错误:

Notice: Undefined index: URI in /var/www/html/...

我需要 $_REQUEST['U​​RI'] 来构建我自己的路由器。 文件 .htaccess 已添加到项目中,因此 apache 应该知道我将覆盖路由。顺便说一句,它看起来像:

Options +FollowSymLinks
RewriteEngine On

RewriteCond %REQUEST_FILENAME !-f
RewriteCond %REQUEST_FILENAME !-d
RewriteRule ^(.*)$ index.php [NC,L]

当然,我是从网络浏览器运行脚本的,所以应该定义 $_REQUEST['U​​RI']。 问题出现在: PHP 7.1 + Apache2.4 + Ubuntu16.04

有人可以帮忙吗?

【问题讨论】:

URI 是一个查询字符串变量,对吧?即example.com/?URI=something。无论如何,我几乎可以肯定你想用它作为重写规则:RewriteRule ^(.*)$ index.php?URI=%REQUEST_URI [NC,QSA,L] 它不起作用。目的是在有人在浏览器中键入时获得正确的 URL,即 example.com/index 或 example.com/first_subpage,因此 $_REQUEST['U​​RI'] 应该返回:example.com/index 或 example.com/first_subpage 取决于用户将键入的 URL。这是最简单的网页路由案例。您重写的规则是指通过 URL 传递参数,这不是我尝试做的。 【参考方案1】:

在你的 .htaccess 文件中添加这个

<IfModule mod_rewrite.c>
    RewriteEngine On

    RewriteCond %REQUEST_FILENAME !-d
    RewriteCond %REQUEST_FILENAME !-f
    RewriteRule ^(.*)$ /index.php?url=$1 [QSA,L]
</IfModule>

然后在您的主 index.php 文件中将 url 捕获为

<?php echo $_GET['url']; ?>

所以如果用户打开像example.com/test 这样的页面 那么输出将是test

【讨论】:

它也不起作用,结果与 Eduardo Escobar 和 Croises 之前给出的答案相同。我仍然收到信息:注意:未定义的索引:/var/www/html 中的 URI... 它应该是 url 而不是 uri,尝试print($_GET); 看看请求中的内容 我看到了依赖。 $_GET 参数命名错误。现在它起作用了!非常感谢兄弟:)【参考方案2】:

正如@EduardoEscobar 所说,您要做的是:

$uri = $_SERVER['REQUEST_URI'];
echo("$uri");

【讨论】:

以上是关于PHP 7.1 路由问题的主要内容,如果未能解决你的问题,请参考以下文章

[翻译]为MVC框架构建路由

TCP/IP 7 路由协议

RIP 路由协议基本配置

为啥Cisco Packet Tracer 7.1 64位 配置完后保存不了?

Laravel index.php 路由问题

PHP - 可以找到用户是不是从路由器后面浏览并获取路由器信息