Перезапись URL на IIS7 для Wordpress - PullRequest
6 голосов
/ 31 декабря 2008

Я использую виртуальный хостинг с IIS7 и поддержку PHP. Я пытаюсь запустить WordPress блог с "красивыми URL-адресами" (удаление index.php). Хостинг-провайдер не хочет устанавливать модуль URLRewrite, поэтому эта опция мне недоступна. Я нашел плагин для WordPress, который удалит index.php из URL-адресов постоянных ссылок и должен был заменить страницу 404 на index.php ... но это тоже не работает.

Я знаком с переписыванием URL для веб-сайта ASP.NET, но я не уверен, как бы я поступил с PHP. Кажется, что настройка хостинга одновременно поддерживает ASP.NET и PHP, поэтому я думаю, что можно было бы запустить код перезаписи через ASP.NET, но я не уверен, как это сделать.

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

Ответы [ 3 ]

5 голосов
/ 01 января 2009

Я использую ManagedFusion Url Rewriter и пользовательскую страницу ошибки 404 в моем блоге .

Для ManagedFusion Url Rewriter требуется файл с именем ManagedFusion.Rewriter.rules, который имитирует .htaccess, мне пришлось поэкспериментировать с ним, чтобы сделать все правильно, поэтому я включу то, что у меня сейчас есть:

#  Managed Fusion Url Rewriter
#  http://managedfusion.com/products/url-rewriter/
#
#  Developed by: Nick Berardi
#       Support: support@managedfusion.com
#
RewriteEngine on

#
# Place Rules Below
#

# misc WordPress rewrites
RewriteRule ^/wp-login\.php$ /wp-login.php [L]
RewriteRule ^/wp-comments-post\.php$ /wp-comments-post.php [L]
RewriteRule ^/wp-admin/(.*)$ /wp-admin/$1 [L]

# deny access to evil robots site rippers offline browsers and other nasty scum
RewriteCond %{HTTP_USER_AGENT} ^Anarchie [OR]
RewriteCond %{HTTP_USER_AGENT} ^ASPSeek [OR]
RewriteCond %{HTTP_USER_AGENT} ^attach [OR]
RewriteCond %{HTTP_USER_AGENT} ^autoemailspider [OR]
RewriteCond %{HTTP_USER_AGENT} ^Xaldon\ WebSpider [OR]
RewriteCond %{HTTP_USER_AGENT} ^Xenu [OR]
RewriteCond %{HTTP_USER_AGENT} ^Zeus.*Webster [OR]
RewriteCond %{HTTP_USER_AGENT} ^Zeus
RewriteRule ^.* - [F,L]

# remove www
RewriteCond %{HTTP_HOST} ^www\.robboek\.com$ [NC]
RewriteRule ^(.*)$ http://robboek.com$1 [R=301]


# redirect old urls
RewriteRule ^/2008/12/blog-on-hold.html$ /2008/12/12/blog-on-hold/ [R=301]
RewriteRule ^/2008/11/google-chrome-wont-start-in-vista-x64\.html$ /2008/11/16/google-chrome-wont-start-in-vista-x64/ [R=301]
RewriteRule ^/2008/11/pass-community-summit-2008-events.html$ /2008/11/14/pass-community-summit-2008-events-calendar/ [R=301]
RewriteRule ^/2008/11/fort-stevens-camping-trip.html$ /2008/11/14/fort-stevens-camping-trip/ [R=301]
RewriteRule ^/2008/10/first-post.html$ /2008/10/10/first-post/ [R=301]
RewriteRule ^/blog/CommentView,guid,1d8cba50-0814-4c89-86df-eca669973e8e.aspx$ /2006/09/29/junctions-in-windows-vista/ [R=301]
RewriteRule ^/blog/2006/09/29/JunctionsInWindowsVista.aspx$ /2006/09/29/junctions-in-windows-vista/ [R=301]

# rewrite all nonexistent files and directories to use index.php for WordPress
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ /index.php$1

Правила обрабатывают красивые URL-адреса, удаляют www и перенаправляют несколько старых URL-адресов из предыдущего блога.

У меня также есть файл "404.php", который я настроил как свою страницу ошибки 404. Это не нужно для красивых URL-адресов, но позволит вам использовать страницу WordPress 404 в пользовательских темах. Вот содержимое:

<?php
$qs = $_SERVER['QUERY_STRING'];
$pos = strrpos($qs, '://');
$pos = strpos($qs, '/', $pos + 4);
$_SERVER['REQUEST_URI'] = substr($qs, $pos);
$_SERVER['PATH_INFO'] = $_SERVER['REQUEST_URI'];
include('index.php');
?>

Надеюсь, это поможет. До сих пор это работало очень хорошо для меня.

1021 * Роб *

Обновление: я только что опубликовал статью в блоге о своем опыте использования WordPress на IIS7

4 голосов
/ 13 января 2009

Спасибо всем за предложения.

Мой хост закончил установку IIRF , и это сработало как шарм. Существует файл с именем IsapiRewrite4.ini для правил перезаписи. Чтобы моя установка Wordpress работала без index.php в URL, все, что мне нужно было сделать, это добавить:

RewriteRule ^/sitemap.xml$   - [L]
RewriteRule ^/(?!index.php)(?!wp-)(.*)$ /index.php/$1

Первая строка разрешает запросы на файл sitemap.xml. Вторая строка обрабатывает удаление index.php из URL. С точки зрения производительности это тоже нормально, я не видел никаких проблем с медленным реагированием страниц.

Надеюсь, это поможет кому-то еще, кому нужна подобная функциональность.

0 голосов
/ 11 января 2009

Изменение страницы 404 на index.php должно помочь. Если это не так, плагин может не поддерживать IIS.

В IIS существует XML-файл * web.config , который делает то, что делает .htaccess в Apache HTTPD. (т.е. переопределить настройку веб-сервера статическим файлом конфигурации). Широко используется в приложении ASP.NET.

Пожалуйста, прочитайте Включить пользовательские ошибки в WordPress на IIS 7.0 Если это тоже не работает, вы можете попросить вашего поставщика услуг установить его для вас. Они могут настроить этот параметр через графический интерфейс консоли управления IIS.

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