Перезапись URL-адреса в IIS7 для Wordpress

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

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

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


person Andrew Van Slaars    schedule 30.12.2008    source источник


Ответы (3)


Я использую 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: [email protected]
#
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');
?>

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

-Роб

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

person Rob Boek    schedule 31.12.2008
comment
В настоящее время я жду, чтобы узнать, почему мои пользовательские настройки 404 не работают, но как только это будет исправлено, я попробую. Спасибо! - person Andrew Van Slaars; 02.01.2009

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

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

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

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

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

person Andrew Van Slaars    schedule 12.01.2009

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

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

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

person Dennis C    schedule 11.01.2009