2012-10-18 122 views
0

我有一個有點混亂的問題。我想了解mod_rewrite,但我很困惑。如何使用mod_rewrite將任何東西,但PHP網頁index.php?

我想要做的是將所有網址(如/ settings/account或/ user/user123)重定向到index.php。一個PHP腳本(我已經創建)使用$ _SERVER ['REQUEST_URI']將URL分解成多個部分,然後使用include。例如,它將包括settings.php?page = account或user.php?uid = user123。

但是,如果URL是/settings.php?page=account或/user.php?uid=user123我不希望它通過索引重定向。換句話說,如果URl有一個文件擴展名,只需轉到那個文件,但如果它不(像/ settings)那麼去index.php來處理它應該去的地方。

這怎麼辦?在此先感謝您的任何建議!

回答

0

如果你不想使用普通的redirect-every-url-which-has-no-corresponding-file的方法,你也可以嘗試你的方法。要沒有點任何重定向到一個共同的腳本,使用方法:

RewriteRule ^([^.]*)$ index.php?path=$1 

您可能希望排除某些URL仍然像images/css/等規則,然後才使用簡單的RewriteCond:

RewriteCond %{REQUEST_URI} !images/ 
RewriteCond %{REQUEST_URI} !css/ 
0

您需要的是RewriteCond指令,其中!-f!-d模式。

RewriteCond檢查用戶的HTTP請求是否與提供的條件匹配。在你的情況下,你需要使用!-f後綴檢查文件根目錄中是否已經存在一個請求的文件(在變量%{REQUEST_FILENAME}中提供)。同樣,如果您希望在目錄中建立索引,則可以使用!-d添加相同的模式,該模式將檢查請求的目錄是否位於文檔根目錄中。

所以實際RewriteRule在這兩行會做的伎倆:

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
相關問題