簡體   English   中英

如何讓所有 example.com 頁面重定向到 example.com/smth

[英]How can I make all example.com pages redirect to example.com/smth

當我設置我的 WP 網站時,我沒有將它直接安裝到 public_html 中,而是將它安裝在 public_html/my_subdir 中。 為此,我做了以下 .htaccess

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTP_HOST} ^(www.)?example.com$
RewriteCond %{REQUEST_URI} !^/my_subdir/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /my_subdir/$1
RewriteCond %{HTTP_HOST} ^(www.)?example.com$
RewriteRule ^(/)?$ my_subdir/index.php [L] 
</IfModule>

然后,我想將www.example.com重定向到www.example.com/dev,所以我從 Cpanel 添加了一個 301 重定向。 上面的 htaccess 在 Cpanel 中創建了一個重定向規則,它與我的新重定向沖突,所以我刪除了第一個,我的 htaccess 最終為:

<IfModule mod_rewrite.c>
RewriteEngine on
</IfModule>
RewriteCond %{HTTP_HOST} ^example\.com$ [OR]
RewriteCond %{HTTP_HOST} ^www\.example\.com$
RewriteRule ^/?$ "https\:\/\/www\.example\.com\/dev\/" [R=301,L]

它有效,如果我去www.example.com會帶我到www.example.com/dev但如果我去www.example.com/services會帶我到錯誤 404 頁面。

我怎樣才能做到這樣,轉到任何 example.com 頁面都會將我帶到 example.com/dev 中的等效頁面,例如example.com/services = example.com/dev/services

好吧,我剛剛意識到解決方案比我想象的要簡單:

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTP_HOST} ^(www.)?example.com$
RewriteCond %{REQUEST_URI} !^/my_subdir/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /my_subdir/$1
RewriteCond %{HTTP_HOST} ^(www.)?example.com$
RewriteRule ^(/)?$ my_subdir/index.php [L] 
</IfModule>

我一直在我的問題中寫下答案。 只是為了將來的人做同樣的事情:我的 public_html 文件夾中有 2 個網站(在兩個不同的文件夾中)(因為我很擅長保持組織的有序性):

my_subdir(我的舊網站)

my_subdir_2(新網站,正在建設中)

我希望兩個站點都在同一個域下工作,避免整個備份、更改 WP 域數據、備份、轉移到新域等。

因此,我進行了設置,以便www.example.com將重定向到www.example.com/my_subdir (我的舊網站)和我的新網站,以便在www.example.com/my_subdir_2 上訪問(這樣我就可以繼續處理它.

上面的代碼使它像這樣工作,您可以將 WP 的通用域設置為兩個站點的 example.com。

完成新網站后,我將(備份)並刪除舊網站的文件夾並將 htaccess 更改為:

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTP_HOST} ^(www.)?example.com$
RewriteCond %{REQUEST_URI} !^/my_subdir_2/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /my_subdir_2/$1
RewriteCond %{HTTP_HOST} ^(www.)?example.com$
RewriteRule ^(/)?$ my_subdir_2/index.php [L] 
</IfModule>
RewriteRule ^/?$ "https\\:\\/\\/www\\.example\\.com\\/dev\\/" [R=301,L]

這只會將文檔根目錄 ( ^/?$ ) 重定向到/dev/ 要將/<anything>重定向到/dev/<anything>您需要將指令更改為如下所示:

RewriteRule (.*) https://www.example.com/dev/$1 [R=301,L]

RewriteRule替換中的所有這些反斜杠轉義都不是必需的 - 這是 cPanel 的典型特征。)

但是,這將導致重定向循環,因為它還會重定向/dev/<anything>本身。 因此,您可以將上述內容更改為:

RewriteRule !^dev/ https://www.example.com/dev%{REQUEST_URI} [R=301,L]

首先測試 302(臨時)重定向,只有在您確定它按預期工作時才更改為 301(永久) - 以避免潛在的緩存問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM