web-dev-qa-db-ja.com

「domain.com/login」から「domain.com/wp-login.php」へのリダイレクトを無効にする方法

'mydomain.com/login'の下にwordpressとは異なる何かをインストールしたいのですが、WordPressは自動的にこのリンク '/ login'を '/wp-login.php'にリダイレクトします。

このリダイレクトをどこで無効にできますか?

2
marek

canonical.php を見ると、wp_redirect_admin_locations関数が非常に遅くフックされていることがわかります - 優先順位1000 。これはredirect_canonicalにフックされているほぼすべての関数がこれより前に実行されることを意味します。そのため、wp_redirect_admin_locationsフックからtemplate_redirectを条件付きで削除します。

add_action(
  'template_redirect', 
  function() {
    $requ = untrailingslashit($_SERVER['REQUEST_URI']);
    if (site_url('login','relative') === untrailingslashit( $_SERVER['REQUEST_URI'] )){
      remove_action( 'template_redirect', 'wp_redirect_admin_locations', 1000 );
    }
  }
);
4
s_ha_dum

この回答は、パーマリンク内の “ login”の調査結果に基づいていますwp-login.php wp3.6

「/ login」リダイレクトを無効にする

すでに述べたように、関連コードは/wp-includes/canonical.phpの最後にあります。

あなたはデフォルトの "wp_redirect_admin_locations"を削除し、それをわずかに修正されたカスタムバージョンで置き換える必要があります。これをあなたのfunction.phpファイルに追加してください。

function custom_wp_redirect_admin_locations() {
    global $wp_rewrite;
    if ( ! ( is_404() && $wp_rewrite->using_permalinks() ) )
        return;

    $admins = array(
        home_url( 'wp-admin', 'relative' ),
        home_url( 'dashboard', 'relative' ),
        home_url( 'admin', 'relative' ),
        site_url( 'dashboard', 'relative' ),
        site_url( 'admin', 'relative' ),
    );
    if ( in_array( untrailingslashit( $_SERVER['REQUEST_URI'] ), $admins ) ) {
        wp_redirect( admin_url() );
        exit;
    }

    $logins = array(
        home_url( 'wp-login.php', 'relative' )
    );
    if ( in_array( untrailingslashit( $_SERVER['REQUEST_URI'] ), $logins ) ) {
        wp_redirect( site_url( 'wp-login.php', 'login' ) );
        exit;
    }
}

function remove_default_login_redirect() {
    remove_action('template_redirect', 'wp_redirect_admin_locations', 1000);
    add_action( 'template_redirect', 'custom_wp_redirect_admin_locations', 1000 );
}

add_action('init','remove_default_login_redirect');

なぜこれが必要ないのか

また、/ loginに他に何もない場合にのみリダイレクトが適用されることにも注意する必要があります。例えばすぐにあなたがページを作成するか、またはログインはリダイレクトをもう適用しません。これが起こる場所については/wp-includes/canonical.php:553を参照してください。

0
kraftner