2012-06-18 4 views
9

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

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

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

.htaccess (я предполагаю, что Wordpress Permalinks получают к нему.):

# 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 

EDIT:

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

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

Попробуйте вставить свой код * перед * the RewriteBase/blog/' –

+0

та же проблема - содержимое загружается, но url по-прежнему'/blog/page/subpage/' –

+0

Из любопытства, что произойдет, если вы измените регулярное выражение вашего правила to: '^ subpage/$'? –

ответ

3

Добавление некоторых правил в вашем 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 (URL-адрес больше не изменяется).

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

RewriteEngine On 
RewriteBase/

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

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