我試圖允許訪問某些資源,如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'匹配'^。* $',但其他人做了什麼? – 2014-08-31 08:29:27
這個技巧在這裏解釋: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
這是否適合你? – anubhava 2014-08-31 14:14:22