2013-12-16 115 views
1

我想寫.htaccess規則拒絕訪問到所有子文件夾的所有.php文件,但允許在一個子目錄中獲得一個單一的文件,並在該文件中使用RewriteRule,它的工作原理,如果Request URI是不是空的,但是當我訪問/它顯示故宮重寫規則禁止空請求URI

現在我有:

<Files ~ "\.(php)$"> 
    deny from all 
</Files> 

<Files Test.php> 
    allow from all 
</Files> 

Options +FollowSymLinks 
Options All -Indexes 

RewriteEngine On 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule^/Sub/Test.php [QSA] 

如何使它按預期方式工作?

回答

1

這是因爲當你要求/,它被映射到index.php或任何你的索引文件,此條件再失敗:

RewriteCond %{REQUEST_FILENAME} !-f 

您可以添加額外的「編輯狀態中,也允許所述/請求通過:

RewriteCond %{REQUEST_URI} ^/$ [OR] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule^/Sub/Test.php [QSA] 
1

實際上所有的.php這種阻塞可容易地在處理只有2條規則。考慮以下代碼:

RewriteEngine On 

# block any request with `.php 
RewriteCond %{THE_REQUEST} \s/.+?\.php[\s?] [NC] 
RewriteRule^- [F] 

# send all non-file, non-dir requests to /Sub/Test.php 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^.+$ /Sub/Test.php [L]