2012-02-16 2 views
-1

Я только что создал новый шаблон страницы WordPress, который запускает некоторые php mysql-скриптов внутри него, и я хотел бы применить mod rewrite к его подстраницам.симпатичный url с .htaccess?

, например, я следующую ссылку генерироваться:

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

как я могу превратить это в нечто вроде:

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

в моем HTAccess я есть по умолчанию код, генерируемый WordPress ...

Кто-нибудь знает, как добиться этого?

ответ

0

Вы должны добавить следующие строки в файле .htaccess:

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

Это не приукрашивают URL, которые не имеют все три переменные, но это достаточно легко, чтобы добавить к этому или просто при необходимости добавьте дополнительное правило.

+0

RewriteRule не может иметь дело с параметрами строки запроса – Tiggerito

+1

Очевидно, она не может обрабатывать их на входящей строке, но мы переписывая в строку запроса, которую он может сделать. На самом деле, если бы он не мог сделать этого, было бы почти невозможно сделать что-нибудь полезное с mod_rewrite. –

+0

@Tiggerito - Если вы не сбиты с толку '?!' В начале первой группы, которая является просто отрицательной группой, означающей, что если эта группа будет сопоставлена, то совпадение в целом будет аннулировано. –

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] 
+0

пробовал это, но он не работает ... он просто ничего не делает, я также удалил htaccess и все равно никаких изменений .. это странно! – Steff

+0

@Steff Правила в порядке. Убедитесь, что 'mod_rewrite' включен. – ThinkingMonkey

0

Я использовал этот маленький класс справки о недавнем проекте .. должен сказать, что работал блестящий .. был написан: Kyle E Джентиле

<?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/

Marty