0

我有一个 index.php 页面,应该链接到我的其他网站。

<?php 

    if(!isset($_GET['page']))$page = 'home.php';
        else{
            $page = $_GET['page'] . ".php";
        }

    include("_includes/header.php");

    include("_includes/navigation.php");

    include("_pages/$page");

    include("_includes/footer.php");
?>

这就是我的 index.php 的样子。它应该获取我单击的页面(当我在导航上单击时)并将其定向到该页面,以便每个页面重复使用页眉、导航和页脚。

<div id="navi">
    <ul>
        <li><a href="home">Home</a></li>
        <li><a href="skills.php">Skills</a></li>
        <li><a href="_pages/my_projects.php">Projects</a></li>
        <li><a href="_pages/experience">Experience</i></a></li>
        <li><a href="_pages/personal">About</a></li>
        <li><a href="_pages/contact">Contact</a></li>
    </ul>
</div>

根据代码,“home”链接应该可以工作,但它说找不到 URL,因为它正在我所在的目录中寻找“home”。但是它在我的 pages 目录中。“技能”做同样的事情。唯一有效的是通过联系的链接项目,因为我正在指定一个路径。但是,有效的链接不会通过我的索引页面,因为 header.php(包含 css)、navigation.php 和 footer.php 不包含在此处。

我做了研究,发现我必须对 .htaccess 文件和/或 mod_rewrite 做一些事情。有人可以帮帮我吗?我一直在寻找大约 2-3 周现在什么都没有。

4

3 回答 3

1

你应该引用 index.php,而不是 home..

<div id="navi">
    <ul>
        <li><a href="index.php?page=home">Home</a></li>
        <li><a href="skills.php">Skills</a></li>
        <li><a href="_pages/my_projects.php">Projects</a></li>
        <li><a href="_pages/experience">Experience</i></a></li>
        <li><a href="_pages/personal">About</a></li>
        <li><a href="_pages/contact">Contact</a></li>
    </ul>
</div>
于 2013-05-08T16:43:34.703 回答
1

您的链接应该是:

<div id="navi">
    <ul>
        <li><a href="index.php?page=home">Home</a></li>
        <li><a href="index.php?page=skills">Skills</a></li>
        <li><a href="index.php?page=my_projects">Projects</a></li>
        <li><a href="index.php?page=experience">Experience</i></a></li>
        <li><a href="index.php?page=personal">About</a></li>
        <li><a href="index.php?page=contact">Contact</a></li>
    </ul>
</div>
于 2013-05-08T16:46:36.430 回答
0

它与您的网络服务器如何处理请求密切相关。如果您尝试访问不是由 PHP 处理的 url,您将无法正常工作。默认情况下,PHP 仅处理 .php 请求 url(还有 .php5 和其他一些)。

一个解决方案可能是编写一个重写条件,将 /home/ 转换为 index.php?page=home。这假设您正在运行启用了 mod_rewrite 和 htaccess 的 Apache Web 服务器。

因此,假设以这种方式规范化您的链接:

  <div id="navi">
      <ul>
            <li><a href="/pages/home">Home</a></li>
            <li><a href="/pages/skills">Skills</a></li>
            <li><a href="/pages/my_projects">Projects</a></li>
            <li><a href="/pages/page=experience">Experience</i></a></li>
            <li><a href="/pages/page=personal">About</a></li>
            <li><a href="/pages/page=contact">Contact</a></li>
      </ul>
  </div>

你可以像这样写一个 .htaccess,然后把它放在 /pages/ 文件夹中:

   RewriteEngine On
   RewriteRule ^/pages/(.*)$ /index.php?page=$1 [QSA,L]

请注意,对 /pages/ 的每个请求都将被重写,因此您应该小心编写它们,避免重写 .css .png 等等......

这将以这种方式影响您的请求:

  1. Apache 将接收对 /pages/ 中名为 home 的文件的请求
  2. RewriteRule 将使用正则表达式检测它
  3. 该规则强制 apache 使用参数 page=home (或任何正则表达式捕获的)回答您的 index.php

PS 也许您可能对标志 P 感兴趣,以将请求发送到 index.php 作为代理,但有关更多信息,您应该参考 mod_rewrite 文档(http://httpd.apache.org/docs/current/mod/mod_rewrite.html )

于 2013-05-08T17:18:52.190 回答