Переписать URL-адрес вне базы Wordpress

Мой блог WordPress установлен по адресу domain.com/blog, и у меня есть страница с подстраницами, структура которых выглядит как domain.com/blog/page и domain.com/blog/page/subpage.

Я хочу, чтобы мои посетители могли перейти на domain.com/subpage и увидеть содержимое domain.com/blog/page/subpage без перенаправления на этот URL-адрес извне, избегая перезаписи постоянной ссылки WordPress.

Я попытался использовать RewriteRule ^subpage$ /page/subpage [L], и контент обслуживается, но URL-адрес выглядит как domain.com/blog/page/subpage (я предполагаю, что на него попадают постоянные ссылки Wordpress).

.htaccess:

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /blog/
RewriteRule ^index\.php$ - [L]

// tried inserting my code here.

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

# END WordPress

РЕДАКТИРОВАТЬ:

Эти журналы показывают активность при посещении страницы -

ip - - [19/Jun/2012:14:03:53 -0400] "GET /subpage/ HTTP/1.1" 301 - "http://domain.com/referrer/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:13.0) Gecko/20100101 Firefox/13.0.1"
ip - - [19/Jun/2012:14:03:53 -0400] "GET /blog/page/subpage/ HTTP/1.1" 200 20022 "http://domain.com/referrer/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:13.0) Gecko/20100101 Firefox/13.0.1"

Кроме того, вот мой корень .htaccess -

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /blog/
RewriteRule ^subpage/?$ /blog/page/subpage/ [QSA,L] 
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /blog/index.php [L]
</IfModule>

RewriteCond %{HTTP_HOST} ^domain.com$ [OR]
RewriteCond %{HTTP_HOST} ^www.domain.com$

person Dave Kiss    schedule 18.06.2012    source источник
comment
Попробуйте вставить свой код перед RewriteBase /blog/   -  person Jon Lin    schedule 19.06.2012
comment
та же проблема - контент загружается, но URL по-прежнему /blog/page/subpage/   -  person Dave Kiss    schedule 19.06.2012
comment
Из любопытства, что произойдет, если вы измените регулярное выражение вашего правила на: ^subpage/$?   -  person Jon Lin    schedule 19.06.2012
comment
тот же результат, что и упоминалось   -  person Dave Kiss    schedule 19.06.2012


Ответы (1)


Добавление некоторых правил в ваш htaccess при использовании Wordpress всегда сложно. Вместо этого вы должны использовать его API перезаписи.

Сначала поместите этот код в конец /wp-content/themes/CURRENT_THEME_ACTIVATED/functions.php:

function my_custom_page_rewrite_rule()
{
    add_rewrite_rule('^subpage/?', 'index.php?pagename=page/subpage', 'top');
}
add_filter('init', 'my_custom_page_rewrite_rule');

Примечание: необходимо указать уровни страниц в параметре pagename, иначе URL изменится.

Затем вам нужно сообщить Wordpress, что он должен принять во внимание ваше новое правило. Для этого перейдите в панель администратора: Settings > Permalinks > нажмите кнопку Save. Теперь вы сможете перейти на domain.com/blog/subpage и увидеть содержимое domain.com/blog/page/subpage (адрес больше не меняется).

Наконец, если вы хотите сделать domain.com/subpage доступным, вам нужно добавить htaccess в корневую папку и поместить в него этот код:

RewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^/]+)/?$ blog/$1 [L]

Вот и все. Вы можете пойти в domain.com/subpage и теперь вы получите то, что хотите.

person Justin Iurman    schedule 06.04.2016