サポート » 使い方全般 » .htaccessのリライト

  • 解決済 momomint

    (@momomint)


    # BEGIN WordPress
    <IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteRule ^index\.php$ – [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /japanese/index.php [L]
    </IfModule>
    # END WordPress

    # BEGIN WordPress
    <IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteRule ^index\.php$ – [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /japanese/index.php [L,R=301]
    </IfModule>
    # END WordPress

    に変更すると
    あらゆるURLが/japanese/index.php にリダイレクトされます。
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    の部分で[ファイルがない]かつ[ディレクトリがない]場合
    RewriteRule . /japanese/index.php [L,R=301]
    を実行すると思うのですが、既存記事のURLもTOPにリダイレクトされます。

    これはなぜでしょうか?

8件の返信を表示中 - 1 - 8件目 (全8件中)
  • モデレーター jim912

    (@jim912)

    既存記事のファイルがないためではないでしょうか

    ワードプレスで記事を投稿し、
    example.com/japanese/1
    がURLの場合
    # BEGIN WordPress
    <IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteRule ^index\.php$ – [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /japanese/index.php [L]
    </IfModule>
    # END WordPress
    だと記事表示されます。

    しかし、
    # BEGIN WordPress
    <IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteRule ^index\.php$ – [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /japanese/index.php [L,R=301]
    </IfModule>
    # END WordPress
    に変えると トップにリダイレクトされるようになります。

    R だとRewriteではなくRedirectになってしまうので当たり前では?(WordPressは実際にはRewriteでindex.phpで受けてルーティングしてるだけなのでRewriteCond %{REQUEST_FILENAME} !-dには引っ掛からないので……)

    何が目的か分かりませんが……404ページテンプレートを使えばなんとかなる話?

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /japanese/index.php [L,R=301]
    だとあらゆる記事(存在しようがしまいが)がindex.phpにリダイレクトされます
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    は機能しないのでしょうか?

    (あっdじゃなくてfだった )

    記事の存在確認はRewriteCondでは(多分原則)できないはずなので「記事が存在しない場合はリダイレクト 」としたいならPHP側でやる必要が。

    (WordPressの404が表示されるわけでもないページかありそっちの話ならまた変わってくるかも……と思ったけどそのパターンはなさそう?)

    >RewriteCondでは(多分原則)できないはず
    >「記事が存在しない場合はリダイレクト 」としたいならPHP側で

    そうなのですね。
    jim912さんの”既存記事のファイルがないためではないでしょうか”もわかった気がします。
    helloworld
    という記事を作ると
    helloworldというファイルが作成され、パスは
    example.com/japanese/helloword
    だと思っておりましたが、
    パーマリンクは自由に決めれるようなので、ファイルは作成されているかもしれませんが、
    URL!=パスなのですね。

    みたいなことを思っているのですが、
    概ね合っておりますか?

    WordPress は記事ごとにファイルを生成したりはしません。

    (サーバーサイドキャッシュを使用していると話が変わってきますが、) WordPress はリクエストごとに毎回コンテンツをDBから取得し、レンダリングします。

    ありがとうございました。

8件の返信を表示中 - 1 - 8件目 (全8件中)
  • トピック「.htaccessのリライト」には新たに返信することはできません。