• Resolved windorz

    (@windorz)


    ログインURLを変更した状態で、ログイン画面からパスワードリセットを行った際、届くメールに記載されているURLがwp-login.phpのままになっており、クリックしても404になります。

    wp-login.phpの部分を変更すれば404にはなりません。

    パスワードリセットのリンクを、XO securityで変更したURLにすることは可能でしょうか?

Viewing 8 replies - 1 through 8 (of 8 total)
  • Thread Starter windorz

    (@windorz)

    パスワードリセットのリンクは、

    /wp-login.php?login=admin&key=xxxxx&action=rp

    というURLになりますが、if文のpreg_match( '#/wp-login\.php\?action=\w+#', $formated_path )にマッチしないので、URLの置き換えが行われず、そのまま出力されているようです。

            public function site_url( $url, $path, $scheme, $blog_id ) {
    if ( isset( $this->options['login_page_name'] ) ) {
    $loginfile = $this->options['login_page_name'] . '.php';
    $formated_path = '/' . ltrim( $path, '/' );
    if ( '/wp-login.php' === $formated_path || preg_match( '#/wp-login\.php\?action=\w+#', $formated_path ) ) {
    $url = $this->get_login_url( $url, $loginfile );
    } elseif ( is_multisite() && ! is_subdomain_install() ) {
    $blog = get_site( $blog_id );
    if ( $blog->path . 'wp-login.php' === $formated_path || preg_match( '#' . $blog->path . 'wp-login\.php\?action=\w+#', $formated_path ) ) {
    $url = $this->get_login_url( $url, $loginfile );
    }
    }
    }
    return $url;
    }

    I updated the piece of code in question to the code below, it now works.

    		public function site_url( $url, $path, $scheme, $blog_id ) {
    if ( isset( $this->options['login_page_name'] ) ) {
    $loginfile = $this->options['login_page_name'] . '.php';
    $formated_path = '/' . ltrim( $path, '/' );
    $pattern = '#/wp-login\.php(\?action=\w+(&key=[^&]+&login=[^&]+)?)?#';

    if ( '/wp-login.php' === $formated_path || preg_match( $pattern, $formated_path ) ) {
    $url = $this->get_login_url( $url, $loginfile );
    } elseif ( is_multisite() && ! is_subdomain_install() ) {
    $blog = get_site( $blog_id );
    $multisite_pattern = '#' . preg_quote( $blog->path, '#' ) . 'wp-login\.php(\?action=\w+(&key=[^&]+&login=[^&]+)?)?#';
    if ( $blog->path . 'wp-login.php' === $formated_path || preg_match( $multisite_pattern, $formated_path ) ) {
    $url = $this->get_login_url( $url, $loginfile );
    }
    }
    }
    return $url;
    }
    Thread Starter windorz

    (@windorz)

    こちらコードの正規表現の不具合だと思っていますが、最新バージョン3.10.5でも修正されていないようです。

      ?action=だけでなく、&action=にもマッチするように対応して頂けないでしょうか?

      Plugin Author ishitaka

      (@ishitaka)

      ご指摘の通り(@windorzさん、@sjonvugt さんありがとうございます)正規表現が間違えていました。

      修正したバージョン3.10.6をリリースしましたので、アップデートして試してみてください。

      返信が遅くなり申し訳ありませんでした(見落としてました💦)

      Thread Starter windorz

      (@windorz)

      修正ありがとうございます。

      正規表現を見ると、相変わらず?action前提となっているようでした。残念ながら、&actionとなるときはログインURLの置換は処理されずにwp-login.phpメールに記載されたままでした。

      元のコードがwp-login.php単独の場合と、actionパラメータがある場合の2つを対象にしているようですので、正規表現を使わずにstroposなどで文字列検出した方がシンプルな感じがします。

      Thread Starter windorz

      (@windorz)

      元のコードを以下のように修正すると、問題なく動作します。

      public function site_url( $url, $path, $scheme, $blog_id ) {
      if ( isset( $this->options['login_page_name'] ) ) {
      $loginfile = $this->options['login_page_name'] . '.php';
      $formated_path = '/' . ltrim( $path, '/' );

      // シンプルな正規表現で ?action と &action の両方にマッチ
      $pattern = '#/wp-login\.php.*(\?|&)action=\w+#';

      if ( '/wp-login.php' === $formated_path || preg_match( $pattern, $formated_path ) ) {
      $url = $this->get_login_url( $url, $loginfile );
      } elseif ( is_multisite() && ! is_subdomain_install() ) {
      $blog = get_site( $blog_id );
      $multisite_pattern = '#' . preg_quote( $blog->path, '#' ) . 'wp-login\.php.*(\?|&)action=\w+#';
      if ( $blog->path . 'wp-login.php' === $formated_path || preg_match( $multisite_pattern, $formated_path ) ) {
      $url = $this->get_login_url( $url, $loginfile );
      }
      }
      }
      return $url;
      }
      Plugin Author ishitaka

      (@ishitaka)

      すみません💦修正したバージョン3.10.7をリリースしましたので試してみてください。

      Thread Starter windorz

      (@windorz)

      修正頂きありがとうございました。

      問題なく動作することを確認できました。

      素晴らしいプラグインをリリースして頂き感謝いたします。

    Viewing 8 replies - 1 through 8 (of 8 total)

    You must be logged in to reply to this topic.