2014-08-31 145 views
1

我試圖允許訪問某些資源,如JS,CSS等,同時靜靜地將其他所有內容重定向到/index.php,這將最終決定內容的其餘部分是否存在或不。這是爲了允許沒有任何事情的友好URL(即靜態文件)通過PHP。.htaccess文件將子目錄作爲根目錄

我正在測試/ public_html/test /目錄中的代碼,但一些.htaccess指令需要/測試/而其他則不需要。當我的工作達到我的滿意度時,我將把它移動到/ public_html /目錄下,但我不想編輯文件以使它在新的位置工作。我所說的是,我希望文件以相同的方式工作,無論位置如何,也無需對完整路徑進行硬編碼(這樣我就可以將其移動到具有不同結構的服務器)。

我在http://localhost/test/以下.htaccess文件:

Options -Indexes 

RewriteEngine On 
RewriteBase/

# Specifically deny /includes/* 
RewriteRule ^includes/ - [R=404,L] 

# Allow /images/*, /css/* & /js/* but deny everything else, e.g. /lib/* 
RewriteCond %{REQUEST_URI} !^/test/images/ 
RewriteCond %{REQUEST_URI} !^/test/css/ 
RewriteCond %{REQUEST_URI} !^/test/js/ 
RewriteRule . - [R=404,L] 

我要改變過去的規則重寫的index.php以後,而不是給一個404的那一刻我只想讓.htaccess文件工作得更好一些。

如何使規則保持一致(即從RewriteCond中刪除test)?我希望能夠在/ test /目錄中對其進行測試,然後將其移至web根目錄(即inside/public_html /)或甚至更低一些,而不更改路徑。我試圖改變RewriteBase,但我不明白它到底做了什麼,我也沒有看到與其他值有任何區別。

如何將此.htaccess文件工作,如果我將其移動到與/ public_html /相同的級別?

理想情況下,我想以下結構:

public_html/ 
public_html/test/ 
public_html/test/css/ 
public_html/test/images/ 
public_html/test/includes/ 
public_html/test/js/ 
public_html/test/lib/ 
public_html/test/index.php 
public_html/.htaccess 

,如果我將它移動到這裏的一切仍然有效:

public_html/ 
public_html/css/ 
public_html/images/ 
public_html/includes/ 
public_html/js/ 
public_html/lib/ 
public_html/index.php 
.htaccess 

回答

0

您可以在規則之前使用動態RewriteBase生成規則:

Options -Indexes 

RewriteEngine On 

## Determine the RewriteBase automatically/dynamically 
RewriteCond $0#%{REQUEST_URI} ^([^#]*)#(.*)\1$ 
RewriteRule ^.*$ - [E=BASE:%2] 

# Specifically deny /includes/* 
RewriteRule ^includes/ - [R=404,L] 

# Allow /images/*, /css/* & /js/* but deny everything else, e.g. /lib/* 
RewriteCond %{REQUEST_URI} !^%{ENV:BASE}(images|css|js)/ [NC] 
RewriteRule . - [R=404,L] 
+0

謝謝!你能解釋它的作用嗎?我知道'$ 0'匹配'^。* $',但其他人做了什麼? – 2014-08-31 08:29:27

+0

這個技巧在這裏解釋:http://www.zeilenwechsel.de/it/articles/8/Using-mod_rewrite-in-.htaccess-files-without-knowing-the-RewriteBase.html – anubhava 2014-08-31 08:53:32

+0

這是否適合你? – anubhava 2014-08-31 14:14:22