2012-07-29 87 views
1

我有這樣如何通過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/.htaccess鏈接到index.php。

index.php有按鈕(查看文件)與ajax到check.php

我已經給common.js相應的AJAX功能網址爲

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

問題是Ajax不是兩個URL正常工作。

是否需要更改文件夾結構來糾正它,或者是否需要更改任何用於訪問check.php的htaccess文件?

回答

2

這不是關於文件夾結構,而是錯誤的htaccess重寫規則。

你的「根」 htaccess的重定向到文件夾查看所有請求(到index.php缺省,我假設)

我不明白你要完成什麼,如果你解釋我可能能夠幫助你。

在當前設置,(通過GET參數的URL時連),你不能訪問任何文件,除了查看/ index.php文件

編輯:

在這種情況下,如果你想查看/ 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. 如果有人訪問查看/ index.php文件,然後他可以自由地訪問check.php。如果在ajax請求之後會話被終止,則可以減少。如果ajax請求包含2個請求,例如,獲取會話密鑰(例如在10秒內到期),然後使用該密鑰從檢查中獲取結果,則可以完成此操作。PHP

  2. Session可以過欺騙(閱讀更多here

+0

我在根文件夾中有三個文件'index.php'(查看頁面),'common.js'和'result.php(php)'。點擊'index.php'(view)文件中的一個按鈕將觸發一個ajax函數到'result.php'。 問題是每個人都可以直接訪問'result.php'。如何避免它?我嘗試使文件夾結構,所有的PHP文件('check.php')都在root後面的文件夾中。所以它不會直接從瀏覽器訪問。我不喜歡重寫rue。 – 2012-07-29 15:50:58

+0

結果是否必須在ajax?你不能使用常規表單嗎? – Tivie 2012-07-29 16:01:04

+0

不,這是簡單的應用程序使用php只與ajax ... – 2012-07-29 16:06:32

1

你爲什麼不只是設置在「查看」文件夾中的域路徑,因此沒有人可以訪問你的控制器等?

我認爲這應該比使用.htaccess更簡單!

這是像大多數PHP框架做..

如果你需要訪問check.php的功能,你可以做一個「ajax.php」來檢查,如果該請求是確定的,然後使用「check.php」來捕捉結果!

+0

,因爲AJAX腳本必須從外部訪問(因此我的問題,如果他不能更改爲常規形式) – Tivie 2012-07-29 16:47:29

+0

你可以做一個「ajax.php」,檢查如果請求是好的,然後使用「check.php」來捕獲結果! – ohartl 2012-07-29 16:49:20

+0

如果請求有效,那麼我可以在'View/ajax.php'中使用'require('../ Controller/check.php');''。像那樣? – 2012-07-29 16:57:54