2016-08-03 22 views
1

我做了一個ajax網站,從我的index.php裏面的/ pages文件夾中調用php頁面,所以我在htaccess中進行了重寫,以返回我的索引中的所有頁面,所以ajax運行良好,但點擊刷新頁面按鈕或第一次加載,功能無法找到文件,所有的時間返回404.php頁:重寫htacces找不到文件

這是我的htaccess:

Options +FollowSymLinks 

RewriteEngine On 

RewriteBase/
RewriteRule ^([a-zA-Z0-9\-]*).php$ index.php?p=$1 [L] 

這是我的PHP函數調用我的網頁:

<div id="ajax-container"> 
<?php 
$d = "pages/"; 
if (isset($_GET['p'])) { 
    $p = strtolower($_GET['p']); 
    if (preg_match("/^[a-z0-9\-]+$/", $p) && file_exists($d . $p . ".php")) { 
     include $d . $p . ".php"; 
    } else { 
     include $d . "404.php"; 
    } 
} else { 
    include $d . "home.php"; 
} 
?> 
</div> 

我認爲問題來自我的重寫,因爲它重寫所有頁面的PHP,所以我認爲它也重寫我的index.php,所以功能找不到['p'],但我不知道,我不知道這是否是這樣如何我可以從我/pages文件夾

+0

你可能想在服務器文件路徑在'file_exists()'函數,嘗試定義'$ d =真實路徑(__DIR__ '/頁/');' - 你可能想添加一些健全檢查像'is_dir() '以及。 – CD001

+0

問題留,其實我不明白爲什麼功能無法找到我的網頁,因爲它找到該文件夾​​,則返回404.php頁面爲什麼不能找到其他頁面 – Tiaw

+0

噢 - 這正是是發生,你需要的標準*不是文件* *不是目錄*條件 – CD001

回答

2

index.php僅重寫文件是越來越在第二次拿起你的重寫,併發送至index.php?p=index不具有相應的頁面在頁面目錄等獲取404.php

避免這個問題的正常方法是添加條件不是文件沒有目錄到你的.htaccess(從而防止網址,以實際被重寫存在的文件或目錄)。

你可以做到這一點通過簡單地改變你的.htaccess到:

RewriteEngine On 
RewriteBase/
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^([a-zA-Z0-9\-]+)\.php$ index.php?p=$1 [L] 


見Apache的RewriteCond手冊。

+0

是的,謝謝你的工作,但現在我有其他問題,它在第一次加載(home.php是返回),但當我點擊一個我的ajax鏈接頁面(例如about.php),我刷新頁面,它只返回about.php,但不返回我的index.php – Tiaw

+0

你有2個'about.php'頁面嗎?一個在根目錄中,另一個在'/ pages'中? – CD001

+0

oups:X ...是...我忘了,當我試圖找到一個解決方案,我將掀起對不起自己:)謝謝你的幫助;) – Tiaw