2015-01-06 90 views
0

一點解釋,然後2個問題....現代重寫和重定向目錄

基本上我建立一個單一頁面顯示手機媒體(由標籤,按類型,等等。等等。) 。所有的媒體上傳&由我標記,所以我不是爲了內容或依賴第三方服務(twitter,facebook,flickr,imgur等)。我做的最有JS的工作(RequireJS模塊...)和我利用ToroPHP一種簡單,重量輕&寧靜的API

我的最終目標是:

允許用戶返回到輸入網址如:///,並始終加載我的根index.php(維護網址)。與此同時,我需要可用的API中的幾個子目錄 獲取數據:

  • /資產/(CSS,字體文件,精靈或SVG圖標)
  • /組件/(用於RequireJS腳本)
  • /API /(這只是具有ToroPHP實例的API子目錄)

我相信下面的代碼片段解決了這個問題(我在想,如果我能得到什麼這是一個很好的解釋是做盡管?我已經從互聯網上的片段拼湊在一起):

RewriteEngine on 
RewriteRule ^/?assets/.+$ - [L] 
RewriteRule ^/?components/.+$ - [L] 
RewriteRule ^/?api/.+$ - [L] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond $1 !^(index\.php) 
RewriteRule ^(.*)$ /index.php [L] 

此外,我希望你能幫助我想出一個辦法,只允許我的「應用程序」(即,內部電話(有沒有在Apache服務器用戶?)由RequireJS模塊發起的API )有權訪問/ assets/&/components/&/api /因此,如果用戶鍵入/ api/test?subject = 123,它們將被路由到不是index.php的頁面,但不是實際的API也是。我希望這與/ components/&/assets /也是一樣的。

*總結問題:

1)。幫助解釋上面的代碼片段。 2)。我可以允許我的服務器訪問/ assets/&/components/&/api /但不允許用戶輸入它們嗎?

顯然,Apache並不是我的專長,但我對學習有相當的信心。

謝謝!

回答

1

幫助解釋上面的代碼片段。

RewriteEngine on 

打開重寫引擎,除非重寫引擎被打開

RewriteRule ^/?assets/.+$ - [L] 
RewriteRule ^/?components/.+$ - [L] 
RewriteRule ^/?api/.+$ - [L] 

這些規則被稱爲「直通」規則沒有任何的規則將做任何事情。-目標意味着「什麼都不做」,並且L標誌停止當前傳球的重寫。這些基本上只是意味着:如果URI以/assets/開始,則什麼也不做,並停止重寫。如果URI以/components/開頭,則不要執行任何操作並停止重寫。如果URI以/api/開始,則不做任何操作並停止重寫。

下一條規則有一些與之相關的條件。該規則將不會應用,除非所有條件都滿足:

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 

這些檢查所請求的URI映射到一個現有的文件或目錄,!-f意味着請求不是一個文件,並在!-d表示請求不是目錄。

RewriteCond $1 !^(index\.php) 

這會檢查請求是否不以/index.php開頭。

最後,如果滿足所有三個條件,則:

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

重寫任何請求是/index.php,並停止改寫。

我可以允許/資產/ & /組件/ &/API我的服務器訪問/,但不允許用戶在其中鍵入他們?

否。如果有人訪問您的頁面,並且您的頁面鏈接到其中一個目錄中的內容,則瀏覽器會加載它,就像有人將其鍵入URL地址欄中一樣。唯一的區別是(有時)瀏覽器會包含一個「Referer」頭文件請求,讓服務器知道哪個頁面告訴瀏覽器加載文件。它並不總是被所有瀏覽器使用,並且很容易被僞造。因此,檢查引薦者並不能保證人們不能直接加載你的文件。

爲了檢查引薦,加入RewriteEngine On線以下這一權利:

RewriteCond %{HTTP_REFERER} !^https?://example.com/ 
RewriteRule ^(assets|components|api)/ - [L,F] 

這實質上是檢查引用者的條件,如果不與「http://example.com」不開始或「https://example.com」,假設「example.com」是您的網站,那麼規則將檢查請求是否以/assets/,/components//api/開頭,並在不改變任何內容的情況下將其傳遞,但​​F標誌會導致服務器返回403禁止。