如何使用.htaccess保持整个网站目录的URL相同?

时间:2016-01-26 15:01:51

标签: php .htaccess

提前感谢您提供的任何帮助。

问题出在标题中。为了解释,我将扩展如下:

当我转到example.com/my/ 我的是一个目录,其中有index.html个文件) 该网址应保持example.com/my/

而且,当我转到example.com/my/anotherfile.php时,网址也应该保留example.com/my/

额外注意: 重定向至/anotherfile.php是通过表单:<form action="anotherfile.php"></form>,因此在有人检查之前不会显示源。

修改

由于有些人无法理解我的意思,这里有不同的解释:

我希望人们浏览我的整个网站example.com,但网址应保持example.com而我需要通过.htaccess而不是通过iframe(无法解释原因)

2 个答案:

答案 0 :(得分:1)

简短的回答是,这是不可能的。

使多个文档具有相同URL的外观的唯一方法是加载实际具有该URL的文档,然后修改用户看到的内容(例如,通过在框架中加载不同的文档,或使用JavaScript进行修改内容)。

您无法使用.htaccess,因为.htaccess只是配置服务器的一种方法。

当浏览器显示&#34;请给我/my/&#34;然后服务器必须回应一些东西。它必须继续/my/所以它无法知道它是否应该返回运行index.phpanotherfile.php的结果。

答案 1 :(得分:1)

要通过单个网址管理整个网站,最简单的方法就是将单个网页index.php和其他文件中包含的内容加载为包含,当用户浏览网站时通过加载新内容的index.php$_POST返回$_SESSION的变量,最佳做法是使用include来保持代码整洁。

在此示例中,我们将通过$_GET发送变量,然后使用存储在$_SESSION变量中的变量重新加载内容。

链接看起来像这样:

<a href="?page=about">About</a>

然后会触发页面顶部的条件并加载该页面。

<?php
    session_start();

    if (isset($_GET['page'])) {
        $_SESSION['page'] = $_GET['page'];

        //This redirect removes the $_GET string so you are keeping the user on the same URL.
        header("Location: http://example.com/my/");
    }

    if (isset($_SESSION['page'])) {
        include($_SESSION['page'] . '.php');
    } else {
        //Show home page content.
    }

您可以使用JS简化此过程,但这是一个纯PHP方法的示例。

请记住,这会对您的搜索引擎优化产生一些负面影响 - 尽管$_GET变量意味着搜索引擎可能能够正确地抓取您的网站,但最终用户会感到困惑。只有在真的非常必须有一个前置URL时才使用此功能。