Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何通过htaccess访问文件?_Php_.htaccess - Fatal编程技术网

Php 如何通过htaccess访问文件?

Php 如何通过htaccess访问文件?,php,.htaccess,Php,.htaccess,我有一个文件夹结构,如 Controller |_check.php View |_ .htaccess |_ index.php |_ Webroot |_ js |_common.js .htaccess In.htaccess <IfModule mod_rewrite.c> RewriteEngine on RewriteRule ^$ View/ [L] Rewri

我有一个文件夹结构,如

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>
问题是ajax在使用两个URL时无法正常工作


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

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

“根目录”中的htaccess将所有请求重定向到视图文件夹(我假设默认为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访问的文件)中

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

注2: 请记住,这不是防弹的(也可能是伪造的),因为:

  • 如果有人访问View/index.php,那么他可以自由访问check.php。如果在ajax请求之后终止会话,则可以减轻这种情况。如果ajax请求包含两个请求,例如,一个请求获取会话密钥,该密钥将在10秒内过期,然后使用该密钥从check.php中获取结果,则可以实现这一点

  • 会话也可能被欺骗(阅读更多)


  • 你为什么不在“视图”文件夹中设置域的路径,这样就没有人可以访问你的控制器等

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

    大多数PHP框架都是这样做的


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

    我在根文件夹中有三个文件
    index.php
    (查看页面),
    common.js
    ,和
    result.php(php)
    。单击
    index.php
    (视图)文件中的一个按钮,将触发一个ajax函数,以
    result.php
    。问题是每个人都可以直接访问
    result.php
    。如何避免呢?我尝试创建文件夹结构,所有php文件(
    check.php
    )都位于根目录后面的文件夹中。所以它不会直接从浏览器访问。我不熟悉rewrite rue。结果必须是ajax吗?您不能使用常规表单吗?因为AJAX脚本必须可以从外部访问(因此,如果他不能更改为常规表单,我的问题是),您可以创建一个“AJAX.php”,检查请求是否正确,然后使用“check.php”捕获结果!如果请求有效,那么我可以使用
    require('../Controller/check.php')
    视图/ajax.php
    中。像那样?是的,你可以。但是使用1个文件或2个文件也是一样的。您可以直接在check.php中检查“有效性”。使用ajax.php只是将有效性检查从一个文件移动到另一个文件。
    var url = 'check.php'; // OR '../Controller/check.php'
    
       session_start();
       $_SESSION['viewCheck'] = true;
       //rest of view.php code
    
    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");
    }