WordPress:カスタム書き換えルール-.htaccessまたはfunctions.php?

mod-rewrite wordpress
WordPress:カスタム書き換えルール-.htaccessまたはfunctions.php?

私はおかしくなりそうだ。 私がやりたいことは、開発中のサイトにこれらのルールを追加することだけです。

fastigheter-spanien/x    property/X&lang=sv
fastigheter-usa/x    property/X&lang=sv
properties-spain/X    property/X&lang=en
properties-usa/X    property/X&lang=en

Xは投稿の名前です。 これらはすべてカスタム投稿タイプです。 この状況になった理由は、複数の言語を使用しているが、クライアントが各記事に対して複数の投稿を作成する必要がないようにしたかったからです(多くのオプションと画像があり、それらを再公開する必要はほとんどありません質問)。 functions.phpでrewrite_rulesを作成し、.htaccessファイルを変更することも検討しましたが、機能させることができませんでした。 これらの書き換えは非常に単純なので、関数を使用する必要はありません。 私はただ適応することはできません
.htaccess file?

試した

RewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_URI} !^/fastigheter-spanien/([^\./]+)
RewriteCond %{REQUEST_URI} !^/fastigheter-usa/([^\./]+)
RewriteCond %{REQUEST_URI} !^/properties-spain/([^\./]+)
RewriteCond %{REQUEST_URI} !^/properties-usa/([^\./]+)

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]

RewriteRule ^fastigheter-spanien/([^\./]+)$ property/$1 [L]
RewriteRule ^fastigheter-usa/([^\./]+)$ property/$1 [L]
RewriteRule ^properties-spain/([^\./]+)$ property/$1&lang=sv [L]
RewriteRule ^properties-usa/([^\./]+)$ property/$1&lang=sv [L]

404が返されます。 何か案は?

  2  0


ベストアンサー

書き換えは正しく機能するはずですが、WordPressには変更が表示されません。 この理由は、WordPressが `$ _SERVER [‘REQUEST_URI’]`から読み取るためです。これには、 `mod_rewrite`操作の結果としてではなく、常に_original_リクエストURIが含まれます。

私は実際にWordPressを使用することに慣れていませんが、他のいくつかの質問のためにソースコードのいくつかを見て、提供されている場合は `$ _SERVER [‘PATH_INFO’]`も使用しようとします。 したがって、これを試すことができます:

AcceptPathInfo On
RewriteEngine On
RewriteBase /

RewriteRule ^fastigheter-(spanien|usa)/([^\./]+)$ property/$2&lang=sv
RewriteRule ^properties-(spain|usa)/([^\./]+)$    property/$2&lang=en

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* /index.php/$0 [L]

しかし、 `PATH_INFO`の使用には問題があることがわかり(通常、ディレクトリごとのコンテキストでは機能しませんが、まだ理由を特定できていないと思います)、一般的にはこれを推奨しません。

他のオプションには、PHP側での作業も含まれます。 Anraikiが提案しましたに似た何かを行うか、単に `$を伝えることができます_SERVER [‘REQUEST_URI’] `が期待するものになります。

「mod_rewrite」がリダイレクトを実行する場合、モジュールがそれを見る「REQUEST_URI」はサーバーの「REDIRECT_URL」変数に保存されます。 したがって、書き換えルールセットを少し調整して、これを行うことができます。

RewriteEngine On
RewriteBase /

# Force L on these rules to cause the REQUEST_URI to be changed (so that
# REDIRECT_URL will end up with the rewritten value we want)
RewriteRule ^fastigheter-(spanien|usa)/([^\./]+)$ property/$2&lang=sv [L]
RewriteRule ^properties-(spain|usa)/([^\./]+)$    property/$2&lang=en [L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]

次に、WordPress処理の初期のどこか( `index.php`など、そのファイルを後続のWordPressリリースで更新する必要はないため)、次のことができます。

if (!empty($_SERVER['REDIRECT_URL']))
    $_SERVER['REQUEST_URI'] = $_SERVER['REDIRECT_URL'];

パーマリンク設定自体を使用してWordPressの動作を定義する方法は非常によくあるかもしれません。リクエストを解析する際にそのルールリストを反復処理するからです。それ自身。 これが可能であれば、この状況を処理するための推奨される方法と考えますが、いずれかの方法でうまくいけば、これらのオプションのいずれかが機能するはずです。

6


htaccessファイルで他のすべてが失敗した場合、「プラグインによる」フックの代替ソリューションがあります

これは私のプラグインの1つからの抜粋です。

ただし、編集が必要であり、「プラグイン」から直接フックする必要があります。 そのため、プラグインが必要になる場合があります。

ただし、編集後にすべてのプラグインを無効にしてみましたか
.htaccess file?

3


タイトルとURLをコピーしました