2012-03-28 167 views
1

我怎麼能只顯示index.php並忽略任何其他的PHP文件的其他調用,所以如果我要去somefile.php,頁面會留在index.php所有的時間,但是如果我要去到index.php?get = somefile它會允許你執行它。php只允許訪問某個文件?

因此總之我只想讓index.php成爲一切的主要調用者和執行者,並且忽略對任何不是index.php的任何其他php文件的調用。

我在我的.htaccess中有這個。

RewriteEngine on 
RewriteCond %{SCRIPT_FILENAME} !-f 
RewriteCond %{SCRIPT_FILENAME} !-d 
RewriteRule ^(.*)$ index.php/$1 

它的一切我所要求的,但它這麼想的,讓你打電話使用得到像index.php?get=somefile

的index.php任何PHP文件是它要去的地方錯誤的,如何糾正呢?

+0

所以你是說,如果有人去的index.php GET = somefile你想讓它重定向到somefile.php或者你要嗎?保持index.php,但包括somefile.php的內容? – TheOx 2012-03-28 02:50:09

+0

一切都會保留在index.php上,它將包含任何被調用文件的內容 – codrgi 2012-03-28 02:53:02

回答

0

您不重寫get參數。試試這個:

RewriteRule ^(.*)$ index.php?get=$1 
-2

http://wiki.apache.org/httpd/RewriteFlags/QSA

RewriteRule ^(.*)$ index.php/$1 [QSA] 

所以,如果你去site.com/?get=asdf,你可以訪問通過$_GET['get']index.php文件。

+0

他表示他希望將site.com/somefile.php重定向到index.php?get = somefile.php。有了QSA,如果有人把somefile.php?var = test。這將成爲site.com/index.php/somefile.php?var=test,但沒有其他規則的服務器將返回更多的可能「頁面未找到」 – 2012-03-28 03:07:24

+0

OP說「所以總之我只想index.php成爲一切的主要調用者和執行者,並忽略對任何不是index.php的其他php文件的調用。「 該重寫規則將通過index.php發送所有內容,並且他可以使用include()或類似的命令執行$ _GET ['get'](在過濾LFI/RFI後) – yrosen 2012-03-28 03:21:08

+0

OP確實說過,但是您的重寫規則將導致「頁面未找到」(大多數時間)或index.php頁面的結構不正確,由於不正確的規則設置不能找到css/includes/js。我已經嘗試過你的這就是爲什麼我有一個附加規則在我的回答中,我在發帖之前試過了 – 2012-03-28 03:24:48

0

現在你的htaccess代碼創建的網址:

index.php/somefile.php 

添加

RewriteCond %{REQUEST_URI} !^index.php.* 

從這裏你可以做兩件事情

1)更改重寫規則^(*) $ index.php/$ 1至:

RewriteRule ^(.*)$ index.php?get=$1 

2)添加其他重寫規則:

RewriteRule ^index.php/(.*)$ index.php?get=$1 [L] 

根據您的服務器設置,你可能需要改變的index.php獲得= $ 1以下

./index.php?get=$1 
http://yourdomain.com/index.php?get=$1 

之一,那麼你的index.php頁面上?你會包含$ _GET ['get']變量傳遞的頁面。

0

這是你的最終規則,告訴我,如果它的工作原理:

RewriteEngine on 
RewriteCond %{SCRIPT_FILENAME} !-f 
RewriteCond %{SCRIPT_FILENAME} !-d 
RewriteRule ^(.*)$ index.php/?get=$1 [QSA,L]