一個非常簡單的問題,但仍然找不到任何答案。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文件。 爲了使這個系統的工作,我需要做:
- 捕捉用戶在URL中通過的.htaccess進入輸入
- 傳遞輸入字符串到PHP,它試圖來理解用戶想要去,並將地址傳遞給javascript
- 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
感謝您的快速響應,將會阻止重寫規則的執行。似乎這是關於我需要什麼,但該網站中斷了8個錯誤消息:[資源解釋爲樣式表,但與MIME類型文本/ HTML傳輸:「http://localhost/Style.css」。]任何想法? – Haeri 2014-09-02 14:56:36
是的,這是由於'style.css'也被重寫爲'index.php'。這是因爲您已經移除了'RewriteCond%{REQUEST_FILENAME}!-f'條件,以防止真正的文件被重寫。 – anubhava 2014-09-02 15:01:25
PS:這實際上會影響資源的加載方式嗎?因爲無論是style.css還是javascripts都沒有顯示出來.. – Haeri 2014-09-02 15:03:03