WordPress + mod_rewrite - PullRequest
       9

WordPress + mod_rewrite

0 голосов
/ 07 апреля 2009

Я использую Wordpress в качестве CMS, где главная страница по большей части статична, а фактическая часть ее блога была перемещена на новую страницу, которая использует собственный шаблон страницы, который в основном действует так, как если бы он был главной страницей. на стандартной установке Wordpress. Он работает довольно хорошо, но у него все еще есть несколько ошибок. Основным является то, что нумерация страниц больше не будет работать, Wordpress не будет распознавать сгенерированные URL-адреса страниц.

Пока что я настроил Wordpress для отображения правильных URL-адресов (domain.com/blog/page/2 вместо domain.com/page/2), и я также получил его для отображения определенной страницы блога сообщения с помощью параметра URL (domain.com/blog?page=N). В общем, я почти закончил, мне просто нужно сопоставить domain.com/blog/page/N с domain.com/blog?page=N. Это было бы простой задачей, если бы это был просто старый статический сайт, но Wordpress имеет свою собственную обработку URL, которая, я считаю, может мешать ему - не говоря уже о том, что «блог» не является реальным URL, поэтому он должен пройти через правила дважды, один раз для отображения нумерации блога, и еще раз, чтобы Wordpress мог обрабатывать сгенерированный URL-адрес как обычно ... Я думаю, что мне может понадобиться использовать флаги N или NS для правил перезаписи, но я просто не знаю, как бы я их использовал

Правило, которое я придумал:

RewriteRule ^/blog/page/([0-9]+)$ /blog?page=$1

Wordpress по умолчанию .htaccess:

RewriteEngine On  
RewriteBase /  
RewriteCond %{REQUEST_FILENAME} !-f  
RewriteCond %{REQUEST_FILENAME} !-d  
RewriteRule . /index.php [L]  

Согласно некоторым предложениям, я получил это для .htaccess, но он все еще не распознает его.

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule /blog/page/([0-9]+)$ /blog?page=$1 [N,QSA]
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

И я вполне уверен, что изменение страницы с помощью параметра URL работает - я вручную изменяю число в URL, и это действительно меняет страницу. Веб-сервер LiteSpeed, если это имеет какое-либо значение

Ответы [ 3 ]

1 голос
/ 16 декабря 2009

Я понял это в конце концов (несколько дней спустя - я просто забыл об этом до сих пор). Во-первых, убедитесь, что вы обновили Wordpress. В то время я использовал 2.5 или 2.6, но по какой-то причине он не работал, пока я не обновился.

Сначала создайте собственный шаблон. Вы будете использовать этот шаблон для своей домашней страницы, так что настройте его и все такое прочее. Оставьте шаблон «Основной индекс» (index.php) в покое - этот шаблон будет использоваться для индексной страницы блога, поэтому для перечисления сообщений в блоге требуется цикл WP.

Теперь иди и создай две страницы. Один для вашей домашней страницы (назовем его «домашний»), а другой для вашего блога (назовем его «блог»). На «домашней» странице установите шаблон для шаблона домашней страницы, который вы создали ранее. На странице блога оставьте его в шаблоне по умолчанию - по умолчанию будет использоваться шаблон «Основной индекс».

Теперь перейдите в настройки «Чтение» и измените его на «Статическая страница». Для главной страницы выберите «домашнюю» страницу, которую вы создали ранее. Для страницы сообщений выберите созданную вами страницу «блога».

Так и должно быть. Я на самом деле пробовал это заранее, но это не сработало, поэтому я попытался использовать правила перенаправления, но безрезультатно. Я закончил тем, что был устаревшей установкой WP. Если у вас установлен мод Sitemap, убедитесь, что вы исключили «домашнюю» страницу, чтобы пауки не нашли дубликат вашей домашней страницы по адресу example.com/home. Вы также можете поместить его в свой robots.txt, чтобы быть уверенным.

Когда вы закончите, корневой каталог (example.com/) вашего домена (при условии, что на нем установлен WP) будет указывать на вашу "домашнюю" страницу. На вашей странице блога (example.com/blog) будут перечислены ваши сообщения. Разбивка на страницы будет работать как положено (example.com/blog/page/2 и т. Д.).

1 голос
/ 07 апреля 2009

Попробуйте следующее

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule /blog/page/([0-9]+)$ /blog?page=$1 [R=301]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
0 голосов
/ 07 апреля 2009

Или попробуйте

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^blog/page/([0-9]+)$ /blog?page=$1 [NC,N]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [NC,L]
</IfModule>

NC делает его нечувствительным к регистру, N заставляет его повторно применять правила, а L останавливает обработку правила.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...