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