【发布时间】:2021-05-02 16:19:56
【问题描述】:
我为 PHP 尝试了一个简单的路由,但我快疯了,因为它没有完全工作......
希望任何人都可以提供帮助。这是我第一次尝试用 PHP 编写自己的路由。
问题
当我请求“SERVER-IP/hms/routing/test”时,它会显示 home.php 的内容 - 好的
当我请求“SERVER-IP/hms/routing/shop”时,它显示 404-error.... - 为什么??
一旦我在服务器上删除“shop.php”,它就会显示我的 index.php
请求:/hms/routing/shop
网址:/shop
不知道为什么它没有正确加载文件...
知道为什么它不起作用吗? :(
我的 .htaccess
RewriteEngine On
RewriteBase /hms/routing
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.+)$ index.php?url=$1 [L,QSA]
我的 index.php
<?php
$request = $_SERVER['REQUEST_URI'];
echo "Request:".$request."<br>";
$url = str_replace("/hms/routing","", $request);
echo "URL: ".$url."<br>";
switch ($url) {
case "/":
include "home.php";
break;
case "/about":
include "about.php";
break;
case "/test":
include "home.php";
break;
case "/shop":
include "shop.php";
break;
}
?>
提前非常感谢! :)
【问题讨论】:
-
我希望你的
shop.php` file exist on the same folder structure asindex.php`` 文件?另外,您能否在将URL传递给SWITCH之前修剪它,因为可能存在一些未请求的空格? -
shop.php 中有什么?它似乎包含它,否则您会从 index.php 中看到
echo。可能有重定向或其他情况导致 shop.php 上的 404。其他建议:删除 index.php 和其他包含文件最后一行的 php 结束标记,因为已知它会导致问题。更改include "shop.php";以支持将require_once与绝对路径require_once __DIR__ . '/shop.php';一起使用,以确保文件存在于完全限定的路径中或将发出错误并且仅包含一次,从而防止循环引用。 -
嗨。是的,所有文件都在同一个文件夹中。我还添加了
$url = trim($url);,但没有任何效果。 -
我已从
include...更改为require_once(__DIR__ . "/shop.php");但仍然是同样的问题。我还从 index.php 中删除了?> -
如果您在使用
require_once时没有看到 PHP 错误,该文件不存在,那么 index.php 正在加载 shop.php 并且您的问题是由 shop.php 脚本引起的。我的其他建议是提高性能和减少潜在问题的代码质量建议。注意:require、include等不是函数调用,不需要括号,使用括号会导致 PHP 词法分析器额外的解析时间。
标签: php apache url-routing