我有以下檔案夾結構
ROOT (loaded on domain.com)
campaigns
| campaign1
|-assets
|-index.php
|-campaign2
.htaccess
index.php
stuff.php
目前要訪問檔案夾內的網站,campaign1我必須在 URL 地址欄中輸入:domain.com/campaigns/campaign1
我應該在.htaccess檔案中放入什么,以便在您放置
domain.com/campaign1瀏覽器時加載并顯示所有內容,domain.com/campaigns/campaign1但當然不會明顯更改地址欄中的 URL。
非常感謝你的幫助。
uj5u.com熱心網友回復:
您可以.htaccess使用 mod_rewrite 在根檔案中執行以下操作。如果“活動”子目錄未知(或太多),這是一個通用版本:
RewriteEngine On
# 1. Abort early if request already maps to a file or directory
RewriteRule ^campaigns/ - [L]
RewriteCond %{REQUEST_FILENAME} -f
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
# 2. Check if the first path-segment maps to a directory in "/campaigns` directory
# If so then internally rewrite the request to that subdirectory
RewriteCond %{DOCUMENT_ROOT}/campaigns/$1 -d
RewriteRule ^([^/] )/ campaigns%{REQUEST_URI} [L]
對模式$1中捕獲的子組的反向參考在哪里。RewriteRule
我必須在 URL 地址欄中輸入:
example.com/campaigns/campaign1
因為campaign1是一個您應該請求的目錄campaign1/(帶有斜杠),否則 mod_dir 將發出外部重定向以附加斜杠。
當您將
example.com/campaign1瀏覽器加載并顯示來自...的所有內容時
同樣,您應該請求example.com/compaign1/- 帶有斜杠 - 并且上述規則假定您是。如果省略尾部斜杠,它將不會執行任何操作,您將得到 404。(如果您期望第三方請求省略尾部斜杠,那么您將需要手動發出 301 重定向以在以上規則。)
更新:
如果我知道進入活動檔案夾的活動檔案夾的名稱怎么辦?基本上,如果我想手動添加規則但特定于活動?
是的,你可以這樣做。事實上,如果您希望以這種方式重寫的活動數量有限,那么這甚至可能更可取,因為它避免了檔案系統檢查。
您還可以洗掉第二條規則(上面第 1 節的第二部分),該規則在請求檔案或目錄時阻止進一步處理。IE。洗掉以下內容:
RewriteCond %{REQUEST_FILENAME} -f RewriteCond %{REQUEST_FILENAME} -d RewriteRule ^ - [L]
因此,您可以執行以下操作,而不是(或之前)上面的第 2 節...
對于單個廣告系列:
# 2. Rewrite campaign to "/campaigns" subdirectory
RewriteRule ^compaign1/ campaigns%{REQUEST_URI} [L]
對于多個廣告系列:
# 2. Rewrite campaigns to "/campaigns" subdirectory
RewriteCond $1 =campaign1 [OR]
RewriteCond $1 =campaign2 [OR]
RewriteCond $1 =campaign3
RewriteRule ^([^/] )/ campaigns%{REQUEST_URI} [L]
請注意,特別是$1 =campaign1,是CondPattern (第二個引數)本身=的前綴運算子。運算子使其成為精確的字串匹配,而不是正則運算式。=
或者,使用正則運算式和交替:
# 2. Rewrite campaigns to "/campaigns" subdirectory
RewriteCond $1 ^(campaign1|campaign2|campaign3)$
RewriteRule ^([^/] )/ campaigns%{REQUEST_URI} [L]
(盡管這可以組合成一個指令。)
更新#2:
在內部重寫之前添加這個,在 URL 的末尾添加一個斜杠:
RewriteCond %{REQUEST_URI} !\.
RewriteRule !/$ %{REQUEST_URI}/ [R=301,L]
Note that all internal links must already linking to the URL with a trailing slash. This redirect is only for the benefit of search engines and third party links that might be referencing the non-canonical URL without a trailing slash.
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/453361.html
