如何通过htaccess访问文件


How to access a file via htaccess?

我有一个类似的文件夹结构

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

In.htaccess

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

视图/.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(视图文件)中有一个按钮,带有到check.php的ajax。

我给出了common.js对应的ajax函数url作为

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

问题是ajax在使用两个url时不能正常工作。

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

这与文件夹结构无关,而是错误的htaccess重写规则。

您在"根"中的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请求由两个请求组成,例如,一个请求获取10秒后到期的会话密钥,然后使用该密钥从check.php获取结果。

  2. 会话也可能被欺骗(点击此处阅读更多)

为什么不在"View"文件夹上设置域的路径,这样就没有人可以访问您的控制器等?

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

这是大多数PHP框架的工作方式。

如果你需要访问check.php的函数,你可以制作一个"ajax.php"来检查请求是否正常,然后使用"check.php"获取结果!