2012-06-19 31 views
1

我嘗試使用Apache的mod_rewrite實現如下:重寫規則到PHP PATH_INFO和隱藏目的地PHP腳本

在文檔根目錄,我有這些文件(例如):

.htaccess 
index.php 
dlscript.php 

我要/downloads/this_is_path_info重寫才能/dlscript.php/this_is_path_info,所以:

RewriteRule ^downloads$ downloads/ [R=301,L] 
RewriteRule ^downloads/(.*) dlscript.php/$1 [NE,L] 

上述做到這一點。

然而,我想請求文件/dlscript.php返回一個HTTP 404碼,所以我嘗試:

RewriteRule ^dlscript.php - [R=404,L] 

但是,這也404 /downloads/。我嘗試添加RewriteCond %{REQUEST_URI} /dlscript.php,但似乎mod_rewrite用重寫的%{REQUEST_URI}替換了%{REQUEST_URI}。

我怎麼能阻止直接訪問dlscript.php,但啓用其他重寫?

編輯:

感謝喬恩林,我想出了這個主意:

RewriteCond %{REQUEST_URI} ^/dlscript.php 
RewriteCond %{THE_REQUEST} ^(GET|POST|HEAD|TRACE)\ /dlscript.php 
RewriteRule .* - [R=404,L] 

而且這個工作。第一條規則是防止ErrorDocument中的問題。

但我不知道這是否應該被視爲「黑客」?任何其他適當的方法?假設我也想ErrorDocument /error.php並且使得/error.php返回404,而不是在php腳本本身內部處理它的其他方法?

回答

0

試試這個:

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /dlscript.php 
RewriteRule . - [R=404,L] 

匹配來%{THE_REQUEST}確保您不匹配對內部重寫的URI。

+0

這激勵我此:'的RewriteCond%{REQUEST_URI} ^/dlscript.php''的RewriteCond%{THE_REQUEST} ^(GET | POST | TRACE)\/dlscript.php''重寫規則* - [R = 404 ,L]'這工作。但我不知道這是否應該被視爲「黑客」? (附加規則是爲了防止ErrorDocument中的問題) –