处理对.html文件的直接访问

时间:2018-08-08 15:30:22

标签: javascript php jquery ajax apache

让我们想象一下我正在创建一个由AJAX驱动的Web应用程序。这意味着访问者只需要加载根目录(或/index.html),然后就只能通过AJAX访问其他页面。这是必要的,因为index.html将是母版页,而其他页面仅使用ajaxifyhistory.js加载到#content中的index.html。当有人直接进入浏览器访问诸如http://example.com/blah.html之类的页面时,就会出现问题。这将导致页面不仅难看,而且会丢失index.html上已经存在的一些重要信息。作为挑战的一部分,我不想拒绝用户对页面的访问。相反,我想将访问者重定向到index.html?url=somepage.html,然后通过AJAX在somepage.html上加载一次index.html。由于脚本将页面加载到#content中并还更新了URL,因此它们最终会在somepage.html上出现,但现在有了一个有意义的页面。

这是我可以提出的一些想法(不是解决方案)。

  • 在每个页面上包含redirect.js文件,以检查该页面是否通过AJAX加载,然后有条件地将用户重定向到index.html?url=somepage.html,但在应用程序包含太多页面的情况下(远远超过一千个)并持续增长),那么将会有太多的冗余(低效的代码)。同样,这是否可行?也许我必须构建一些脚本,该脚本可以读取应用程序上的每个文件,并在将文件内容写回之前包含所述脚本。这是一个很棒的解决方案!
  • 使用PHP自动包含.js文件,但该应用程序完全需要HTML格式(即用户只能访问.html文件),并且只能通过AJAX使用PHP(即,出于灵活性的考虑,PHP可以在http://example.com/上使用,但不能在http://app.example.com上使用。用HTML编写应用程序的全部要点是能够使用Phonegap等平台作为编写方法非Web平台的通用代码,而通过浏览器访问时,相同的代码将部署在桌面上)。有没有一种方法可以在用户访问时在每个HTML页面上动态包含诸如redirect.js之类的文件?
  • 使用Apache(.htaccess)自动重定向到index.html?url=somepage.html,但是我该怎么做?我不知道。实际上,我需要执行此操作的确切代码。是否可以对URL进行适当的编码,以处理somepage.html具有自己的查询参数(如.htaccess中的somepage.html?key=value&another_key=anothervalue)的情况?请注意,使用.htaccess是可行的,因为如果用户是应用程序的本地Phonegap版本,则他们将无法直接输入URL。

有人问了类似的问题here,但是问题和给出的答案都有点模棱两可,答案实际上并不能解决这里提出的问题。

正如我最终决定问之前所看到的那样,许多开发人员都在努力解决类似的问题。帮助我们。

1 个答案:

答案 0 :(得分:0)

在起始页上为网站的所有路径添加重定向需要: 在 .htaccess 文件中:

RewriteEngine on
RewriteRule ^(.*)$ index.html [L]

浏览器字符串的完整路径保留 喜欢:

www.site.com/index.html =>加载index.html

www.site.com/somepage.html?key=value&another_key=anothervalue =>加载index.html

index.html中的

需要获取这样的文件名( php ):

$file_name=basename($_SERVER['SCRIPT_NAME']);  // somepage.html

所有获取参数

$key=$_GET['key']   //value

在所有其他文件中,如果请求不是ajax / xmlhttprequest,则需要禁用内容 像这样:

if(!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest'){    
  exit;    
}
//content if ajax only...