只显示网站的顶级


Showing only top-level for website

我有一个网站,在http://example.com下说可访问。为此,我有几个php脚本,如index.php, intro.php, faq.php, contact.php等。一个典型的用例是这样的:用户进入http://example.com,这将是http://example.com/index.php ->,然后点击"介绍",被重定向到http://example.com/intro.php。

虽然所有这些都很好地工作,我想知道是否有一种方法可以完全隐藏php脚本的名称,因此URL将始终读取为http://example.com/,无论用户是否在index.php, intro.php, faq.php等。使用rewriterrules似乎不是正确的方法,因为它基本上是在做另一个方向:方便用户输入特定的URL(例如,使"。php"可选)。但是,我希望用户只看到站点的URL,而不是沿途的各个脚本。

对于单独的脚本是否有类似的可能,或者这是否需要将所有单独的脚本组合成一个,然后使用如下结构:

if( $_POST['destination'] == "intro" )
{
  //DO ALL THE Introduction MARKUP
}

谢谢。

您可以使用整页iframe,并在iframe中加载intro.php。这样,用户保持在同一页面上,但是iframe中的页面发生了变化。

一种方法(工作,但不是很好)是将所有脚本包含在index.php中,并调用从这些脚本中绘制特定页面的函数。

可以使用AJAX调用在用户单击链接时加载新内容。然后你可以像往常一样创建你的网站,但是添加一个类似于这个的脚本(使用jQuery):

$(function() {
    $('a').click(function() {
        $.get($(this).attr('src'), function(data) {
            document.write(data);
        });
        return false;
    });
)};

我没有试过这段代码,但是沿着这行应该可以工作。

这当然不能在不支持JavaScript的浏览器中工作,你需要用另一种方式来处理表单,所以一个完整的页面iframe可能是一个更容易的解决方案。

考虑到您的进一步解释,我将使用单个干净的index.php,并根据需要包含其他脚本(我甚至将它们放在文档根目录之外,以便它们不能被直接访问,无论是偶然的还是故意的):

index . php:

 <?php
 $action = isset($_POST['action']) ? $_POST['action'] :'index';
 switch($action){
       case 'intro':
            require '../pages/intro.php';
            break;
       case 'somethingelse':
            require '../pages/somethingelse.php';
            break;
       case 'index':
       default:
            require '../pages/index.php';
 }
 ?>

甚至可能使用可能的页面的白名单数组进行优化。这将使原始index.php保持较小&整洁,仍然有可能做所有更复杂的东西在专门的文件。javascript不需要实际的(它不是功能所需要的,但当然可以按需要使用)或由于框架而伪隐藏的url(大多数时候不会欺骗搜索索引器或只想使用直接url的人)。