Dot-Htaccess

通過 htaccess 為單個子目錄提供多個名稱

  • September 27, 2019

主要場景(需要回答)

如果我的網站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,因此您無需對查詢字元串執行任何操作。

引用自:https://serverfault.com/questions/985469