2013-01-15 96 views
0

我已經嘗試了這幾種方式,在這裏閱讀了很多示例和問題,仍然無法弄清楚它是否無法完成。
我想要的是強制使用特定的URL格式訪問某些文件和功能,並拒絕訪問(假404)到其他任何東西 - 甚至是現有的文件/目錄。.htaccess:隱藏現有的文件,但通過RewriteRule使用它們

這部分工作:

RewriteEngine On 

RewriteRule ^([\w]+)$ /somefolder/index.php?page=$1 [L] 
RewriteRule ^person/([\d]+) /somefolder/index.php?page=person&id=$1 [NC,L] 
RewriteRule ^css/([\w]+\.css) /somefolder/css/$1 [NC,L] 
RewriteRule ^images/([\d]{4}-[\d]{2}-[\d]{2}/[\d]+\.(gif|jpe?g)) /somefolder/images/$1 [NC,L] 

以下行,然而,導致500內部服務器錯誤:

RewriteRule ^(.*)$ /somefolder/index.php?page=error [R=404] 

我想,如果/somefolder/index.php(或任何其他文件/目錄可能存在也可能不存在)被訪問者請求,它應該返回404和錯誤頁面。我還計劃在稍後添加此功能:

ErrorDocument 404 /somefolder/index.php?page=error 

.htaccess文件位於根目錄中。這是可行的嗎?

實例:

(頁面由用戶訪問和其他網頁鏈接到)
http://example.com/breakfast - >http://example.com/somefolder/index.php?page=breakfast
(由頁面中使用樣式表)
http://example.com/css/default.css - >http://example.com/somefolder/css/default.css
(圖像在所使用的文件)
http://example.com/images/2011-01-01/test.jpg - >http://example.com/somefolder/images/2011-01-01/test.jpg
(其他所有內容)
http://example.com/this/may.exist - > 404 +錯誤頁面

..這意味着如果有人試圖獲得http://example.com/somefolder/css/default.css(存在),他們將不會收到它。

+0

「確切的URL格式」究竟如何?如果可能的話,描述中突出顯示與其餘URL的差異,指定哪些段是固定字符串,哪些段是可變的?這些信息對於更好地理解你想要的是很重要的。 –

+0

「格式」部分之一是頁面必須在域部分之後使用頁面名稱訪問,例如http://example.com/thispage - 請求真實文件應導致錯誤(缺失)。 – LGT

回答

1

這就是我想要的;它拒絕直接訪問所有PHP文件,但允許他們通過快捷鍵來運行:

ErrorDocument 403 /index.php?page=error 
ErrorDocument 404 /index.php?page=error 

RewriteEngine On 
RewriteRule ^$ /index.php?page=start [L] 
RewriteRule ^([\w]+)$ /index.php?page=$1 [L] 

<Files ".ht*"> 
    Order Allow,Deny 
</Files> 

<Files "*.php"> 
    Order Deny,Allow 
    Deny from All 
    Allow from env=REDIRECT_STATUS 
</Files> 

這會導致500錯誤,因爲(我覺得)它創建了一個無限循環 - 每一個重寫發生時,htaccess的文件被處理再一次:

RewriteRule ^(.*)$ /somefolder/index.php?page=error [R=404]