如何通过htaccess访问文件?

时间:2012-07-29 11:55:29

标签: php .htaccess

我有像

这样的文件夹结构
Controller
  |_check.php

View
  |_  .htaccess
  |_ index.php
  |_  Webroot
          |_ js
              |_common.js
.htaccess    

在.htaccess

<IfModule mod_rewrite.c>
   RewriteEngine on
   RewriteRule    ^$ View/    [L]
   RewriteRule    (.*) View/$1 [L]
</IfModule>

在View / .htaccess

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]
</IfModule>

外部.htaccess文件链接到View文件夹,View/.htaccess链接到index.php。

index.php(查看文件)中有一个按钮,其中ajax为check.php

我给了common.js相应的ajax函数url为

var url = 'check.php'; // OR '../Controller/check.php'

问题是ajax无法正常使用两个网址。

我是否需要更改文件夹结构以更正它,还是需要更改任何htaccess文件才能访问check.php

2 个答案:

答案 0 :(得分:2)

这不是文件夹结构,而是htaccess重写规则错误。

你的“root”中的htaccess会将所有请求重定向到View文件夹(我假设默认为index.php)

我不明白你想要完成什么,如果你解释我可以帮助你。

在您当前的设置中,除了View / index.php之外,您无法访问任何文件(即使在传递GET参数URL时也是如此)

编辑:

在这种情况下,如果您希望View / index.php是唯一可访问的文件并强制人们通过View / index.php文件,则可以使用PHP会话变量。

像这样......

位于view.php文件的顶部:

   session_start();
   $_SESSION['viewCheck'] = true;
   //rest of view.php code
你的check.php代码中的

(或你试图通过AJAX访问的文件)

session_start();
if (isset($_SESSION['viewCheck']) && $_SESSION['viewCheck'] === true) {
    //Code of check.php
} else {
    //Error message or redirect to view.php, for instance

    //error message example
    header('HTTP/1.0 401 Unauthorized');

    //Redirect example
    header("Location: http://www.yourhost.com/View/index.php");
}

注1: 您应该删除htaccess文件的重写规则。

注2: 请记住,这不是防弹(并且可以欺骗),因为:

  1. 如果有人访问View / index.php,那么他可以自由访问check.php。如果会话在ajax请求之后被终止,则可以减轻。如果ajax请求包含2个请求,您可以完成此操作,例如,一个请求获取会话密钥,该会话密钥在10秒内到期,然后使用该密钥从check.php获取结果

  2. 会话也可以被欺骗(阅读更多here

答案 1 :(得分:1)

为什么不在“查看”文件夹中设置域的路径,以便没有人可以访问您的控制器等?

我认为这也应该比使用.htaccess更简单!

这是大多数PHP框架的做法..

如果您需要访问check.php的功能,您可以创建一个“ajax.php”来检查请求是否正常,然后使用“check.php”来捕获结果!