为什么index.php没有工作?

时间:2013-05-08 16:40:37

标签: php .htaccess mod-rewrite

我有一个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周,一无所获。

3 个答案:

答案 0 :(得分: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>

答案 1 :(得分: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>

答案 2 :(得分:0)

它与您的Web服务器处理请求的方式密切相关。 如果您尝试访问不受PHP管理的网址,您将无法使用它。通过deafult 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 / named home
  2. 中重新获取文件请求
  3. RewriteRule将使用regexp
  4. 检测它
  5. 规则强制apache用index.php回答参数page = home(或正则表达式所捕获的内容)
  6. P.S。 也许您可能对标志P感兴趣,将请求发送到index.php作为代理,但是对于更多信息,您应该参考mod_rewrite docs(http://httpd.apache.org/docs/current/mod/mod_rewrite.html