pretty url with .htaccess?

前端 未结 3 686
温柔的废话
温柔的废话 2021-01-29 10:09

i just created a new wordpress page template that runs some php&mysql scripts inside it and i would like to apply mod rewrite to it\'s subpages.

for instance i have

相关标签:
3条回答
  • 2021-01-29 10:34

    Try this:

    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]
    
    0 讨论(0)
  • 2021-01-29 10:36

    I was using this little class help on a recent project.. have to say it worked brilliant.. was written by: 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;
            }
    
        }
    
    }
    ?>
    

    To use this class you must first include the file.
    After including the file, you need to create an options array.

    <?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') );
    ?>
    

    this will then allow you to use the url http://www.quotist.com/quotes-by-authors/letter/d/

    Marty

    0 讨论(0)
  • 2021-01-29 10:41

    You'll have to add the following to your .htaccess file:

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

    This won't prettify URLs that don't have all three variables, but that's easy enough to add to this one or simply put in an additional rule if needed.

    0 讨论(0)
提交回复
热议问题