2012-01-11 170 views
1

我現在htaccess文件包含mod_rewrite的規則來執行這樣的:座到PHP直接訪問文件

www.mysite.com/articles/jkr/harrypotter --> www.mysite.com/index.php?p=articles&author=jkr&book=harrypotter 

www.mysite.com/articles/jkr --> www.mysite.com/index.php?p=articles&author=jkr 

www.mysite.com/articles --> www.mysite.com/index.php?p=articles 

在我的根目錄下,我有一些PHP文件,如:的index.php,pre.php,view.php等。

我想要什麼:阻止直接訪問php文件。

如:

www.mysite.com/index.php --> "404 - Page Not Found" or "File not exist" 

www.mysite.com/view.php --> "404 - Page Not Found" or "File not exist" 

我已經試過,我上搜索發現了一個碼。它使用「f」標誌。但我不明白這一點。當我使用它時,也不顯示主頁。所以,我刪除了我正在測試的所有內容。我的htaccess文件現在只包含三條規則(接受頁面,作者,書籍)。

請幫助。

+1

對不起,我找到了解決辦法:http://stackoverflow.com/questions/1055652/mod-rewrite-error-404-if-php – 2012-01-11 08:57:03

回答

0

創建一個簡單的404.php拋出一個404錯誤,然後重寫index.php來404.php等

+0

謝謝。但在發佈這個問題後,在本頁右側的「相關」部分,如果發現一個類似的問題:http://stackoverflow.com/questions/1055652/mod-rewrite-error-404-if-php 我添加一個標誌,它的作品。 – 2012-01-11 09:00:43

1

我看到了另一個問題,這是以前問這裏:mod_rewrite error 404 if .php

的變化。這我做的是,添加了[NC]標誌。否則,如果我們將大寫字母放在擴展名中(比如「index.PHP」),它將加載。

所以, SOLUTION:

RewriteCond %{THE_REQUEST} \.php[\ /?].*HTTP/ [NC] 
RewriteRule ^.*$ - [R=404,L] 

謝謝

0

你也可以做到這一點在你的腳本水平。如果你的index.php中添加一個規則,以檢查是否已通過GET變量,或稱爲頁面不帶任何參數,像這樣:

<? 

    if(empty($_GET)) 
     header('Location: http://www.yoursite.com/404.php'); 
    else 
     //your usual script 

?> 

然後,你必須控制要麼重定向人一個404錯誤或顯示更有用的內容,例如帶有索引或某種形式的網站導航的着陸頁。

+0

謝謝。但我正在嘗試使用mod_rewrite來做到這一點。這將減少PHP代碼的開銷,一旦這mod_rewrite規則設置。 – 2012-01-11 09:04:02