我嘗試使用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腳本本身內部處理它的其他方法?
這激勵我此:'的RewriteCond%{REQUEST_URI} ^/dlscript.php''的RewriteCond%{THE_REQUEST} ^(GET | POST | TRACE)\/dlscript.php''重寫規則* - [R = 404 ,L]'這工作。但我不知道這是否應該被視爲「黑客」? (附加規則是爲了防止ErrorDocument中的問題) –