-1

内部でいくつかの php&mysql スクリプトを実行する新しいワードプレス ページ テンプレートを作成したところです。そのサブページに mod の書き換えを適用したいと考えています。

たとえば、次のリンクが生成されています。

http://www.quotist.com/quotes-by-authors.html?letter=D

これを次のようなものに変換するにはどうすればよいですか:

http://www.quotist.com/quotes-by-authors/letter/d/ ?

私のhtaccessには、ワードプレスによって生成されたデフォルトのコードがあります...

誰もそれを達成する方法を知っていますか?

4

3 に答える 3

1

これを試して:

Options +FollowSymLinks -MultiViews -Indexes
RewriteEngine on
RewriteBase /

RewriteCond %{ENV:REDIRECT_STATUS} 200
RewriteRule ^ - [L]

RewriteCond %{QUERY_STRING} ^(letter)=(\w)$ [NC]
RewriteRule ([^.]+)\.html http://www.quotist.com/$1/%1/%2? [L,R=301]

RewriteCond %{REQUEST_URI} ^/([\w-]+)/(letter)/\w/? [NC]
RewriteRule ^ /%1.html?%2=%3 [L,QSA]
于 2012-02-16T11:09:14.350 に答える
0

私は最近のプロジェクトでこの小さなクラスのヘルプを使用していました..それは見事に機能したと言わざるを得ません.. によって書かれました: Kyle E Gentile

<?php
// FILENAME: add_rewrite_rules.php
if(!class_exists('add_rewrite_rules')){

    class Add_rewrite_rules{

        var $query_vars;
        var $rules;

        function __construct($options){
            $this->init($options);
        }

        function init($options){
            foreach($options as $key => $value){
                $this->$key = $value;
            }
        }

        function rules_exist(){
            global $wp_rewrite;

            $has_rules = TRUE;

            foreach($this->rules as $key => $value){
                if(!in_array($value, $wp_rewrite->rules)){
                    $has_rules = FALSE;
                }   
            }

            return $has_rules;
        }

        //to be used add_action with the hook 'wp_head'
        //flushing rewrite rules is labor intense so we better test to see if our rules exist first
        //if the rules don't exist flush its like after a night of drinking  
        function flush_rules(){
            global $wp_rewrite;

            if(!$this->rules_exist()){
                //echo "flushed"; // If want to see this in action uncomment this line and remove this text and you will see it flushed before your eyes
                $wp_rewrite->flush_rules();
            }
        }

        //filter function to be used with add_filter() with the hook "query_vars"
        function add_query_vars($query_vars){

            foreach($this->query_vars as $var){
                $query_vars[] = $var;
            }

            return $query_vars;
        }

        //to be used with a the add_action() with the hook "generate_rewrite_rules"
        function add_rewrite_rules(){
            global $wp_rewrite;

            $wp_rewrite->rules = $this->rules + $wp_rewrite->rules;
        }

    }

}
?>

このクラスを使用するには、最初にファイルを含める必要があります。
ファイルをインクルードしたら、オプション配列を作成する必要があります。

<?php
include(YOURPLUGIN_ABSPATH.'/add_rewrite_rules.php');
$options = array(
        'query_vars' => array('letter'),
        'rules' => 
            array(
                '(.+?)/([^/]+)/([^/]+)/?$' => 'index.php?pagename=$matches[1]&letter=$matches[2]'
            )
    );
$rewrite = new Add_rewrite_rules($options);
add_action('wp_head', array(&$rewrite, 'flush_rules'));
add_action( 'generate_rewrite_rules', array(&$rewrite, 'add_rewrite_rules') );
add_filter( 'query_vars', array(&$rewrite, 'add_query_vars') );
?>

これにより、URL http://www.quotist.com/quotes-by-authors/letter/d/を使用できるようになり ます

マーティ

于 2012-02-16T11:32:08.823 に答える
0

.htaccess ファイルに次を追加する必要があります。

RewriteRule ^(?![^.]+\.html.*)([^/]+)/([^/]+)/([^/]+)/?$ $1.html?$2=$3 [L,QSA]

これは、3 つの変数すべてを持たない URL をきれいにするわけではありませんが、必要に応じてこの変数に追加したり、単純に追加のルールを追加したりするのは簡単です。

于 2012-02-16T10:40:44.237 に答える