2010-03-13 3 views
4

UPDATE

Я попытался с помощью внутреннего WordPress переписать. Что я должен сделать, это адрес, как это:Wordpress страниц книги переписать

http://example.com/galleria/artist-name 

отправляется на gallery.php страницу с переменной, содержащей artist-name.

Я использовал эти правила, согласно документации Wordpress':

// REWRITE RULES (per gallery) {{{ 
add_filter('rewrite_rules_array','wp_insertMyRewriteRules'); 
add_filter('query_vars','wp_insertMyRewriteQueryVars'); 
add_filter('init','flushRules'); 

// Remember to flush_rules() when adding rules 
function flushRules(){ 
    global $wp_rewrite; 
    $wp_rewrite->flush_rules(); 
} 

// Adding a new rule 
function wp_insertMyRewriteRules($rules) 
{ 
    $newrules = array(); 
    $newrules['(galleria)/(.*)$'] = 'index.php?pagename=gallery&galleryname=$matches[2]'; 
    return $newrules + $rules; 
} 

// Adding the id var so that WP recognizes it 
function wp_insertMyRewriteQueryVars($vars) 
{ 
    array_push($vars, 'galleryname'); 
    return $vars; 
} 

что теперь странно, что на моем локальном тест WordPress установить, что работает отлично: страница галерея называется и передается переменная galleryname. С другой стороны, на реальном сайте начальный URL-адрес принимается (так как в нем не входит 404), но он изменяется на http://example.com/gallery (я имею в виду, что он фактически изменяется в адресной строке браузера), и переменная не определена в gallery.php.

Любая идея, что могло бы вызвать это другое поведение?

В качестве альтернативы, любой другой способ, который я не мог придумать, который мог бы достичь того же эффекта, описанного в первых трех строках, совершенно прекрасен.


Старый вопрос

Что мне нужно сделать, это переписывание этот адрес:

(1) http://localhost/wordpress/fake/text-value 

к

(2) http://localhost/wordpress/gallery?somevar=text-value 

Примечания:

  • переназначение должно быть прозрачным: пользователь всегда должен видеть адрес (1)
  • gallery является постоянной ссылкой на WordPress страницы, а не реальный адрес

я в основном нужно сначала переписать адрес (изменить его) а затем снова загрузите его обратно в mod rewrite (чтобы wordpress проанализировал его по-своему).

Проблемы

, если я просто сделать

RewriteRule ^fake$ http://localhost/wordpress/gallery [L] 

он работает, но адрес в изменениях браузера, который не хорошо, если я

RewriteRule ^fake$ /wordpress/gallery [L] 

я получаю 404. Я пробовал разные флаги вместо [L], но безрезультатно. Как я могу заставить это работать?

EDIT: полный.Htaccess

# BEGIN WordPress 
<IfModule mod_rewrite.c> 
RewriteEngine On 

RewriteRule ^fake$ /wordpress/gallery [R] 

RewriteBase /wordpress/ 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule . /wordpress/index.php [L] 
</IfModule> 

# END WordPress 
+0

[L] означает «последний», поэтому после первого вы не получите никаких других правил. Причина, по которой первая не действует как «Последняя», заключается в том, что включение имени хоста заставляет запрос вернуться в браузер. Имейте в виду, что правила перезаписи применяются по порядку, и только один проход выполняется по правилам, поэтому, если ваш/wordpress/gallery URL-адрес нужно переписать, поставьте это правило ПОСЛЕ RewriteRule, который вы показываете выше. –

+0

(я не могу предоставить «настоящий» ответ, не видя весь список RewriteRules.) –

+0

Добавлен полный список правил –

ответ

1

Решено, что это был плагин Permalink Redirect, который необходимо было сконфигурировать для пропуска нужных «виртуальных» URL-адресов, иначе он выдаст 301 постоянно переведенный.

+0

Это единственное, что сработало и для меня! – willdanceforfun

1

Попробуйте это правило:

RewriteRule ^fake/([^/]+)$ gallery?somevar=$1 [L] 
+0

Нет, это первое, что я пробовал, и он просто заканчивается на 404 из wordpress. –

0

Извиняюсь за очень откладываемая ответ здесь, но я считаю, что вам нужно сделать, это то, что предложил Гамбо, но с the addition of the passthrough/PT flag:

Этот флаг заставляет механизм перезаписи установить поле uri внутренней структуры request_rec в значение поля имени файла.
...
Этот флажок должен использоваться, если вы хотите смешивать директивы из разных модулей, которые допускают переводчики URL-to-filename.

Хотя Wordpress (через mod_php) запускается после завершения mod_rewrite, он обычно получает исходный (предварительно перезаписываемый) uri, и он использует его для собственного внутреннего переписывания, а не для переписанного значения имени файла.

Так попробуйте:

RewriteRule ^fake/([^/]+)$ gallery?somevar=$1 [QSA,PT] 

Я добавил QSA, так что, на всякий случай, если кто пошел/WordPress/поддельной/что-то страница = 3, он будет получать передается вместе должным образом?. Дайте мне знать, как это работает.

+0

Я тоже пробовал ПТ, но это не помогает. Я считаю, что единственный способ сделать это - через внутреннюю переписку wordpress, как сказал Ричард М в комментарии. –

-1
  1. Используя ваш любимый редактор HTML/PHP, откройте wp-admin/includes/misc.php

  2. поиска Функции Функции got_mod_rewrite Ее вокруг линии 18 или около того.

  3. Комментарий к существующей функции: /* this is commented out */ - Вы можете удалить эту функцию, если вы уверены, что решение работает, но чтобы быть в безопасности, просто прокомментируйте это, если вам нужно вернуть его обратно.

  4. Добавьте следующий вместо:

    function got_mod_rewrite() { 
        $got_rewrite = true; 
        return apply_filters(‘got_rewrite’, $got_rewrite); 
    } 
    
  5. Сохранить и загрузить.

Смежные вопросы