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['URI'] 来构建我自己的路由器。 文件 .htaccess 已添加到项目中,因此 apache 应该知道我将覆盖路由。顺便说一句,它看起来像:
Options +FollowSymLinks
RewriteEngine On
RewriteCond %REQUEST_FILENAME !-f
RewriteCond %REQUEST_FILENAME !-d
RewriteRule ^(.*)$ index.php [NC,L]
当然,我是从网络浏览器运行脚本的,所以应该定义 $_REQUEST['URI']。 问题出现在: 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['URI'] 应该返回: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 路由问题的主要内容,如果未能解决你的问题,请参考以下文章