14

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からのものがあります。私が望むものを達成するために何を書くべきですか?既存のコードの前または後に配置する必要がありますか?

編集: これは私のpublic_html .htaccess であり、これが私が本当にやりたいことです: 私はウェブサイトを持っています:www.domain.comこれを入力するとhttp://www.domain.com/dios/?dios=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/ は、私が作成した実際のフォルダーではありません。これは、Wordpress で作成したページの名前です。問題は、タブのタイトルに神の名前が表示されるようになったことです:Sは、変数 $_GET['dios'] が設定されていることを意味しますが、ファイル (dios.php) をロードしません =/

EDIT3 : 特に domain.com/dios/?dios=agni にアクセスする必要があります。これは、PHP ファイル (dios.php) が wordpress から get_header() をロードできる URL であるため、ファイルに直接アクセスできないためです。

EDIT4:マルチサイトのものを削除することにしました

EDIT5:これらは私が持っているWordpressページ ですdomain.com/dioses/(www.domain.com/wp-content/themes/smitespain/dioses.php)
domain.com/dios/?dios=thor(www.domain.com/wp-content/themes/smitespain/dios.php)

EDIT6:私はワードプレスコーデックスで何かを読んでいました..そして、私が行きたい場合は、に行く ことでdomain.com/diosesアクセスできることに気付きました。アドレスバーのURL:( 問題は、これを試してみると、「?dios=thor」なしで「dios」ページに移動することですdomain.com/index.php?pagename=diosesdomain.com/?pagename=dioses
Rewritebase /RewriteRule example/test ?pagename=diosesdomain.com/example/testdomain.com/dioses
RewriteRule example/test ?pagename=dios&dios=thor

EDIT7:ワードプレスの書き換えを使い始めました。これをテーマのfunctions.phpに追加しました:

function my_rewrite_rules() {  
    add_rewrite_rule(  
        'blah',
        'index.php?pagename=dios&dios=agni',  
        'top'  
    );  
}  
add_action( 'init', 'my_rewrite_rules' );

そして再び..それは ?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']実際に設定されていることを確認し
てから、通常のルールを追加します

4

4 に答える 4

3

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 に感謝します)

于 2014-11-13T20:24:55.630 に答える
1
RewriteEngine On
RewriteCond %{QUERY_STRING}  ^$
RewriteRule ^www\.animals\.com/lion$ /www.animals.com/database/?animal=lion [R=301,NE,NC,L]

このコードを使用してください。うまくいくことを願っています。

于 2014-02-18T10:45:50.747 に答える
1

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/critterdatabase/?animal=critter、.htaccess に手動で追加する必要がなくなります。また、両方のルールを共存させて、.htaccess を/pantherまだ変更していない場合でも .htaccess でアクセスできるようにすることもできます/a/panther

編集:
わかりました、私はそれを調べました.PHPスクリプトを書かないと、このリクエストをインターセプトしてに転送することはできませんindex.php. mutisite の仕組みは次のとおりindex.phpです。WordPress の php コードのエントリ ポイント。どこか深いところで、コードは REQUEST_URI ヘッダーをチェックして、それがマルチサイトの 1 つと一致するかどうかを確認し (/dios)、一致する場合は、構成されたページに要求を転送します (dios.php)。

.htaccess リダイレクトを実行すると ([L] を削除することで)/dioses/agniヒットすることができますindex.phpが、REQUEST_URI ヘッダーは同じまま (/dioses/agni) であり、そのために mulisite が構成されていません。したがって、リダイレクトは失敗します。

于 2013-05-21T08:24:49.727 に答える