我有一個 Wordpress 網站,我正在嘗試將所有頁面重定向到同一域上的登錄頁面,但主頁除外。我嘗試了許多在互聯網上找到的解決方案,但都沒有奏效。
我需要的是:
- 主頁和 wp-admin 頁面應始終可訪問(example.com 和 examplecom/wp-admin)
- 所有其他頁面都應使用 302 代碼重定向到 example.com/redirect-page
提前致謝
uj5u.com熱心網友回復:
可能有更好的解決方案,但你可以試試這個:
您可以$_SERVER['REQUEST_URI']用來獲取部分網址:
網址:www.example.com/abc/de
輸出$_SERVER['REQUEST_URI']:/abc/de
然后你可以使用<meta http-equiv="refresh" content="0; url=http://example.com/redirect-page" />
重定向。
所以是這樣的:
if($_SERVER['REQUEST_URI'] != "" && $_SERVER['REQUEST_URI'] != "/wp-admin") {
echo '<meta http-equiv="refresh" content="0; url=http://example.com/" />';
}
uj5u.com熱心網友回復:
您可以使用過濾器,允許您使用基于當前配置處理網站重定向的代碼創建例外。
https://plugins.trac.wordpress.org/browser/simple-website-redirect/trunk/SimpleWebsiteRedirect.php#L113
像這樣的東西:
add_filter(
'simple_website_redirect_should_redirect',
function( $should_redirect, $url ) {
if( home_url() === $url ) {
return false;
}
return $should_redirect;
},
10,
2
);
Htaccess:https ://stackoverflow.com/a/38594600/19168006
編輯:您需要將該代碼添加到您的主題中functions.php
這是第二種解決方案:可能不如理論上的功能性 .htaccess 解決方案(如果存在)那么優雅。
// 重定向整個站點,除了一個頁面 ID
add_action( 'template_redirect', 'pc_redirect_site', 5 );
function pc_redirect_site(){
$url = 'http://' . $_SERVER[ 'HTTP_HOST' ] . $_SERVER[ 'REQUEST_URI' ];
$current_post_id = url_to_postid( $url );
if ( ! is_admin() && ! is_page( 9999 )) { // Excludes page with this ID, and also the WordPress backend
$id = get_the_ID();
wp_redirect( 'http://example.com', 301 ); // You can change 301 to 302 if the redirect is temporary
exit;
}
}
如果您不想重定向管理部分,請洗掉!is_admin()&& 將http://example.com替換為您希望將流量重定向到的目的地 默認情況下,這會執行 301(永久)重定向;如果您打算將其設為臨時,請將 301 更改為 302 顯然將 9999 換成您希望排除的頁面 ID。
但是請注意,如果您沒有使用子主題并且啟用了自動更新,那么當您的主題強制更新并且您必須再次更新它時,它可能會在某個時候被覆寫。
更多解釋:這里
uj5u.com熱心網友回復:
.htaccess在根檔案頂部的注釋標記之前# BEGIN WordPress嘗試以下操作(您不需要重復該RewriteEngine指令):
# Redirect all pages except "homepage", "wp-admin" and static assets
RewriteCond %{REQUEST_URI} !^/redirect-page$
RewriteCond %{REQUEST_URI} !^/wp-admin($|/)
RewriteCond %{REQUEST_URI} !\.\w{2,4}$
RewriteRule !^(index\.php)?$ /redirect-page [R=302,L]
我還在例外中包含了“靜態資產”(影像、CSS、JS - 任何帶有檔案擴展名的東西),因為我想/redirect-page需要訪問這些。
當然,我們需要為/redirect-page自己做一個例外,否則會導致無限的重定向回圈。
正則運算式上的!前綴否定運算式,所以當它不匹配時它是成功的。
請注意,與RewriteRule 模式匹配的 URL 路徑不以斜杠開頭,這與REQUEST_URI服務器變數不同。
如果您愿意,可以將上述內容簡化為單行(以犧牲可讀性為代價):
RewriteRule !^(index\.php|redirect-page|wp-admin($|/.*)|. \.\w{2,4})?$ /redirect-page [R=302,L]
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/495764.html
標籤:php WordPress .htaccess 重定向
