私がこれをどのように解決したかを見るには、EDIT8にジャンプします
Wordpressブログ:www.animals.com
です。テーマディレクトリに特定のPHPファイルがあります:www.animals.com/wp-content/themes/mytheme/db.php
。また、そのためのカスタムテンプレートがあります。 Wordpress管理パネルで新しいページを作成して、db.php
を表示します:www.animals.com/database
。
したがって、ライオンについて何かを読みたい場合は、www.animals.com/database/?animal=lion
に移動します(これは、PDOなどを使用して、$ _ GET ['animal']からの値をクエリに挿入するPHPを作成する方法であるためです)。
今、www.animals.com/database/?animal=lion
にwww.animals.com/lion
としてアクセスしたいと思います。
.htaccessまたはWordpress Rewriteを使用する必要がありますか?.htaccessは、Wordpressフォルダーのルート(wp-config.phpおよびこれらのファイル)または私のテーマディレクトリ?
ルートからのものはRewriteBase /
とWordpressからのものをデフォルトで持っています。私が望むものを達成するために何を書くべきですか?それを既存のコードの前または後に置くべきですか?
[〜#〜] edit [〜#〜]:これは私のpublic_html .htaccessであり、これは私が本当にしたいことです:I www.domain.com
のウェブサイトがあり、これをhttp://www.domain.com/dios/?dios=agni
と入力すると、アグニ神に関する情報が表示されます。 Agni神に関する情報にアクセスするには、www.domain.com/dioses/agni
と入力します。 PHPファイルはwww.domain.com/wp-content/themes/smitespain/dios.php
にありますx_xが機能していません
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^dioses/(\w*)$ dios/?dios=$1 [NC,L]
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
EDIT2:私はマルチサイトを使用しています(EDIT4をチェック)、そして/ database// dios /と/ dioses /はnot実際のフォルダーです私が作成したのは、Wordpressで作成したページの名前です。問題は、タブのタイトル:Sに神の名前を表示することです。これは、変数$ _GET ['dios']が設定されていることを意味しますが、ファイル(dios.php)をロードしません= /
EDIT:具体的にはdomain.com/dios/?dios=agniにアクセスする必要があります。これは、PHPファイル(dios.php)をワードプレスからget_header()をロードするので、ファイルに直接アクセスできません
EDIT4:マルチサイトのものを削除することにしました
EDIT5:これらはWordpress私が持っているページ:domain.com/dioses/
for (www.domain.com/wp-content/themes/smitespain/dioses.php)
domain.com/dios/?dios=thor
for (www.domain.com/wp-content/themes/smitespain/dios.php)
EDIT6:wordpress codex ..で何かを読んでいましたが、domain.com/dioses
にアクセスしたい場合、domain.com/index.php?pagename=dioses
またはdomain.com/?pagename=dioses
にアクセスしてアクセスできます。
それで、これをRewritebase /
と次のルールの間に追加しました:RewriteRule example/test ?pagename=dioses
とdomain.com/example/test
は私をdomain.com/dioses
にリダイレクトしますが、アドレスバーのURLも変更します:(
これを試してみると、RewriteRule example/test ?pagename=dios&dios=thor
を指定すると、「?dios = thor」なしで「dios」ページに移動します。
EDIT7:wordpress rewriteを使用し始めました。これをテーマのfunctions.phpに追加しました:
function my_rewrite_rules() {
add_rewrite_rule(
'blah',
'index.php?pagename=dios&dios=agni',
'top'
);
}
add_action( 'init', 'my_rewrite_rules' );
そして再び..itは?dios = agniなしでページdiosをロードします
EDIT8:そして最後に、なんとかそれを機能させることができました=)
最初に知っておく必要があるのは、新しい?dios=XXXX
が$_GET['dios']
で使用できなくなり、代わりに$wp_query->query_vars['dios']
を呼び出す必要があるため、これをテーマのfunctions.phpに追加したことです。
function add_query_vars($new_var) {
$new_var[] = "dios";
return $new_var;
}
add_filter('query_vars', 'add_query_vars');
function add_rewrite_rules($rules) {
$new_rules = array('([^/]+)' => 'index.php?pagename=dios&dios=$matches[1]');
$rules = $new_rules + $rules;
return $rules;
}
add_filter('rewrite_rules_array', 'add_rewrite_rules');
$wp_query->query_vars['dios']
が実際に設定されていることを確認します
その後、通常のルールを追加します
WordPressに触れずに解決する別の方法があります。
.htaccessに追加
RewriteRule ^lion /indexw.php?pagename=db&dios=$1 [L,E=URI:/detail/]
Indexw.phpファイルを作成します。
<?php $_SERVER["REQUEST_URI"] = $_SERVER["REDIRECT_URI"]; include("index.php");
使い方? mod_rewriteは、E = URI:value引数で指定されたREDIRECT_URIを設定します。 indexw.phpはREQUEST_URIを正しい値で上書きするだけです(これに関する洞察を提供してくれたRavi Thapliyalに感謝)
WordPressは、識別されていないすべてのもの(つまり、既存のファイルやフォルダーではない/index.php
)のルートにグローバルリダイレクトを配置します。一方、それらを?animal=unidentified
にリダイレクトしたいとします。したがって、動物のキーワードのリストが修正されない限り、提案された解決策はWordPressを台無しにする可能性があります。
もし10奇数の動物がいたら、以下のように.htaccessに追加できます(ルート/)
RewriteEngine on
RewriteBase /
RewriteRule ^(lion|leopard|tiger|dog|cat)/?$ database/?animal=$1 [NC,L]
# WordPress rules come here
40奇数の動物の場合は、動物のディレクトリ(存在する必要はありません)のプレフィックスを付けることをお勧めします。
RewriteRule ^a/(.+?)/?$ database/?animal=$1 [NC,L]
これにより、/a/critter
がdatabase/?animal=critter
にリダイレクトされ、手動で.htaccessに追加する必要がなくなります。両方のルールを共存させることもできます。これにより、/panther
の.htaccessを変更していない場合でも、/a/panther
でアクセスできます。
編集:
さて、調査しましたが、PHPスクリプトがこのリクエストをインターセプトしてindex.php
に転送するためのスクリプトを書くことなくしては不可能です。mutisiteの仕組みは次のとおりです。書き換えに一致するものがないため、WordPressのphpコードのエントリポイントであるindex.php
に移動します。どこか深いところで、コードはREQUEST_URIヘッダーをチェックして、マルチサイト(/dios
)および存在する場合は、構成されたページ(dios.php
)に要求を転送します。
/dioses/agni
に対して.htaccessリダイレクトを実行すると、index.php
をヒットできますが([L]を削除することにより)、REQUEST_URIヘッダーは同じまま(/ dioses/agni)であり、そのために構成されたmulisite。したがって、リダイレクトは失敗します。
RewriteEngine On
RewriteCond %{QUERY_STRING} ^$
RewriteRule ^www\.animals\.com/lion$ /www.animals.com/database/?animal=lion [R=301,NE,NC,L]
このコードを使用してください。うまくいくことを願っています。
URLの書き換えは、add_filter('rewrite_rules_array', function() {})
を呼び出しても、add_rewrite_rule()
を呼び出しても機能しません。どうやらフィルター'rewrite_rules_array'
はフロントエンドWebサイトのページを開いたときにトリガーされなかったため、書き換えは生成されませんでした。
解決策は、管理エリアに移動し、ページの設定->パーマリンクを開くことでした。書き換えを変更するたびに、これを行う必要があります。
Vanilla Wordpressがそのように機能するかどうかはわかりません。これはおそらく、インストールされているプラグイン/テーマが原因です。