我有一个网站,在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的人)。