2014-09-02 31 views
1

一個非常簡單的問題,但仍然找不到任何答案。RewriteCond%{REQUEST_FILENAME}全部

我需要所有情況下的重寫條件。我不關心如果目錄,文件或任何存在與否。剛好轉到重寫規則。

以下是我有:

Options -Indexes 
RewriteEngine on 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-l 

RewriteRule ^(.*)$ index.php?url=$1 [QSA,L] 

規則僅適用於不存在的文件。但我想得到用戶輸入的任何內容,因爲url字符串是用php處理的,它決定了如何處理它。

編輯 =========================================== ==================================

問題得到了回答,但事實證明這不是我需要什麼。所以這裏新修改的問題:

整個網站運行在Ajax上。意思是說,只有一個index.php文件,其中包含網站的框架。每個其他頁面/內容都通過Ajax加載。因此有一個名爲「pages」的文件夾,其中包含所有被加載到index.php中的php文件。 爲了使這個系統的工作,我需要做:

  1. 捕捉用戶在URL中通過的.htaccess進入輸入
  2. 傳遞輸入字符串到PHP,它試圖來理解用戶想要去,並將地址傳遞給javascript
  3. javascript用ajax加載內容。

一些代碼:

的.htaccess - 見上

PHP:

$pass = $_GET['url']; 
$pass = str_replace(".php", "", $pass); 
$pass = str_replace(".html", "", $pass); 
$pass = str_replace("pages/", "", $pass); 

$dirtest = "pages/" . $pass . ".php"; 
$isdir = file_exists($dirtest); 

if ($pass == "") { 
    $pass = "news"; 
}else{ 
    if (!$isdir){ 
     $pass = "pageNotFound"; 
    } 
} 
echo $pass; 

阿賈克斯: 這是一個很大的文件,所以我不想在這裏的垃圾郵件這個,但它基本上需要$ pass,並執行一些ajax加載函數。

這裏有一個問題: 當用戶想訪問前:下載頁面時:他輸入 「(site)/ download」。由於該目錄中不存在此特定文件,因此.htaccess將「下載」傳遞給php,該文件檢查頁面文件夾中是否存在download.php,並且由於這是真實的,它會將「下載」傳遞給Ajax。 Ajax在index.php中加載頁面/ download.php。這是應該的。 但是如果用戶輸入「(site)/ pages/download」會怎麼樣。 .htaccess注意到這個文件存在於這個目錄中,並且沒有將任何參數傳遞給php,這會破壞一切。

我需要的是: 我需要以某種方式操縱url請求,以便不允許直接訪問/ pages /,但在ajax調用它時允許訪問。

如果您需要了解更多信息或明確的代碼,這裏是GitHub的庫: GitHub

回答

0

您可以使用該負前瞻基於規則:

Options -Indexes 
RewriteEngine on 

RewriteRule ^((?!index\.php$).*)$ index.php?url=$1 [QSA,L,NC] 

這裏(?!index\.php$)是負先行那如果請求URI爲index.php

+0

感謝您的快速響應,將會阻止重寫規則的執行。似乎這是關於我需要什麼,但該網站中斷了8個錯誤消息:[資源解釋爲樣式表,但與MIME類型文本/ HTML傳輸:「http://localhost/Style.css」。]任何想法? – Haeri 2014-09-02 14:56:36

+0

是的,這是由於'style.css'也被重寫爲'index.php'。這是因爲您已經移除了'RewriteCond%{REQUEST_FILENAME}!-f'條件,以防止真正的文件被重寫。 – anubhava 2014-09-02 15:01:25

+0

PS:這實際上會影響資源的加載方式嗎?因爲無論是style.css還是javascripts都沒有顯示出來.. – Haeri 2014-09-02 15:03:03

相關問題