通過 htaccess 為單個子目錄提供多個名稱
主要場景(需要回答)
如果我的網站
http://website.com
有多個子目錄:
/features/
./articles/
./projects/
其中都包含任意數量的文件和文件夾;
有沒有辦法更改前導目錄的名稱?
例如:
http://website.com/content/features/( ... ) Becomes http://website.com/public/features/( ... ) AND http://website.com/private/features/( ... )
–
以前的情景(擱置)
可以說我有一個網站託管在
http://website.com
.我想在網站的一個子版塊中添加一些個性化項目,例如
/extra/
.所以,假設我有:
/extra/feature.php?subject=( a childrens cartoon ) /extra/article.php?subject=( fetish photography project ) /extra/ebook.php?subject=( local golfing borchure )
有沒有辦法為
extra
目錄應用別名,使其成為兩個或多個其他名稱?例如:/extra/feature.php?subject=( a childrens cartoon ) Becomes /public/feature.php?subject=( a childrens cartoon ) And /private/feature.php?subject=( a childrens cartoon )
我認為這可能與
htaccess
?
解決方案
Scenario 1
只是將 2 行程式碼放在一個.HTACCESS
文件中,位於http://website.com
.程式碼是:
RewriteEngine on RewriteRule ^(?:public|private)/(.*) extra/$1
現在,訪問
http://website.com/extra/(directory)
、http://website.com/public/(directory)
或http://website.com/private/(directory)
都將顯示相同的目標文件。任何其他
/name/
都將導致error 404
.
在
.htaccess
您可以使用 mod_rewrite將 URL 從內部重寫/public/
為/extra/
。例如,要僅重寫表單的 URL,
.../feature.php?subject=<something>
您可以.htaccess
在文件根目錄中的文件中執行以下操作:RewriteEngine On RewriteCond %{QUERY_STRING} ^subject=[^&]+ RewriteRule ^(?:public|private)/(feature\.php)$ /extra/$1 [L]
這匹配表單的 URL
/public/feature.php?subject=<something>
或/private/feature.php?subject=<something>
併將請求重寫為/extra/feature.php?subject=<something>
. 這是內部重寫,地址欄中的 URL 不會改變。
?:
in使子模式不被擷取,因為我們在替換字元串(又名目標 URL)(?:public|private)
中不需要它。
(feature\.php)
- 這是一個擷取子模式,在替換中使用$1
反向引用進行引用。這只是節省了打字(和潛在的錯誤)。但是,您也可以將所有三個實例組合article.php
在一起ebook.php
以使用單個指令來處理。
RewriteCond
為了匹配查詢字元串,該指令是必需的。RewriteRule
唯一匹配 URL 路徑。預設情況下,來自請求 URL 的查詢字元串會傳遞到目標 URL,因此您無需對查詢字元串執行任何操作。