使用index.html和index.php时,从URL隐藏index.php

时间:2015-02-02 01:57:19

标签: javascript php jquery html .htaccess

我有一个使用index.html和index.php的网站。 index.html是一个年龄限制启动页面,当您在按钮上单击是时,您将使用index.php重定向到主站点,这是一个没有任何/子域的单页滚动条。

我想要做的是,当你被重定向到index.php时,是隐藏example.com/index.php URL的index.php ...我搜索了整个网络但是尚未找到有效的解决方案。

修改.htaccess没有用,我不认为那里的任何代码做我想要的(我自己也没有设法写一个)。我尝试过使用iFrame和JavaScript,但很难找到一个有效的解决方案。我得到的关闭是使用DirectoryIndex for index.php但当然index.html将不起作用。

我确信这有一个简单的解决方案,但我认为这是错误的方式。我该如何解决这个问题?

感谢您的时间!

2 个答案:

答案 0 :(得分:1)

执行此操作的一种方法是将以下内容添加到.htaccess文件中:

DirectoryIndex index.php index.html

这将使用index.php作为默认索引文件。在php文件中,您可以执行类似这样的操作,以便在用户第一次访问您的网站时显示index.html

// start a new session and check if the index.html have been included
session_start();
if(!isset($_SESSION['index_included'])) {
  // display the index.html and exit script
  // notice that we are setting index_included to true in our session
  include_once('index.html');
  $_SESSION['index_included'] = 1;
  exit;
}
// rest of your php goes here

如果您想标记用户点击了index.html中的按钮,您可以使用ajax执行此操作:

<!DOCTYPE html>
<html>
<head>
<title>Sample Index.html</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script>
<script>
// index.html
$(document).ready(function() {
  //
  $('#button').click(function() {
    // make an ajax request to index.php to tell that the button
    // is clicked
    $.ajax('index.php', {
      type : 'post',
      data : 'clicked=true',
      success:function() {
        // reload the location to send user to index.php
        window.location.reload();
      }
    });
    return false;
  });
});
</script>
<body>
  <a href="#" id="button">click me</a>
</body>
</html>

然后在index.php中捕获ajax调用并设置如下的会话变量:

// index.php
session_start();
// if we receive an ajax request we mark this in the session
if(isset($_POST['clicked'])) {
   $_SESSION['clicked'] = true;
   exit;
}
if(!isset($_SESSION['clicked'])) {
  // since the user hasn't clicked the button in index.html yet
  // we include that file 
  include_once('index.html');
  exit;
}
// rest of your php code which only gets executed if $_SESSION['clicked'] is set

作为替代方案,您可以使用setcookie()而不是将状态存储在会话中。这样的事情应该有效:

// index.php
if(isset($_POST['clicked'])) {
  setcookie('clicked', true);
  exit;
}
if(!isset($_COOKIE['clicked'])) {
  include_once('index.html');
  exit;
}
// rest of index.php

答案 1 :(得分:0)

您可以查看php.ini文件并添加expose_php = off语句。 虽然我从未尝试过,但我认为这是你正在寻找的东西。

link可能还有一些额外的提示,说明如何屏蔽您未使用的扩展程序。

-----更新-----

在阅读了Cyclone给出的答案之后,因为它代表了一个完全不同于我认为你的问题的问题的解决方案,我再次重读你的问题,觉得我给了你错误的答案。但是我会让它留在那里以防我可能第二次误读。

因此,如果您试图隐藏index.php链接http://example.com/index.php,那么就没有真正的方法可以让它完全消失,因为用户可能会输入或从中获取写了一个链接。不过,您可以重定向到http://example.com/而不是http://example.com/index.php

如果您同时拥有index.htmlindex.php,这只有在您使用Cyclone的答案从index.html内拨打index.php并且不显示时才有效第二次。