Jump to main content Jump to doc navigation

Эта страница нужна, если MODX работает на Microsoft IIS и нужны дружественные URL (FURL). На Apache используют ht.access / .htaccess. На IIS — файл web.config и модуль URL Rewrite.

Тема появилась из обсуждения на форуме: IIS 8 на Windows Server 2012 R2 и мультиязычная маршрутизация. Те же базовые правила подходят и для более новых версий IIS.

Требования

  1. Установите на сервере модуль IIS URL Rewrite, если его ещё нет. Без него IIS не применяет правила из web.config.
  2. Положите web.config в корень сайта рядом с index.php (на одном уровне с assets/, manager/ и connectors/). Не кладите его в core/. Оттуда правила не переписывают публичные запросы к страницам.
  3. Убедитесь, что сайт или приложение IIS указывает на этот корень.

Пример web.config

Создайте web.config в корне сайта (или вставьте эти правила в уже существующий файл). Правило Friendly URLs повторяет суть корневого ht.access в Revolution: неизвестные пути отдаются в index.php?q=….

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
  <system.webServer>
    <rewrite>
      <rules>
        <!-- Опционально: блокировать internal dummy connection, если они есть в логах -->
        <rule name="Block internal dummy connection" stopProcessing="true">
          <match url=".*" />
          <conditions>
            <add input="{HTTP_USER_AGENT}" pattern="internal dummy connection" />
          </conditions>
          <action type="CustomResponse" statusCode="403"
            statusReason="Forbidden" statusDescription="Forbidden" />
        </rule>

        <rule name="MODX Friendly URLs" stopProcessing="true">
          <match url="^(.*)$" />
          <conditions logicalGrouping="MatchAll">
            <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
            <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
          </conditions>
          <action type="Rewrite" url="index.php?q={R:1}" appendQueryString="true" />
        </rule>
      </rules>
    </rewrite>
  </system.webServer>
</configuration>

Если MODX лежит в подкаталоге (например /modx), поправьте url в rewrite так, чтобы он указывал на index.php этой папки, либо сделайте корень приложения IIS равным web-корню MODX. Тогда пример выше можно не менять.

Включение Friendly URLs в MODX

Включайте FURL в панели управления после того, как rewrite уже работает.

  1. Откройте в браузере URL без реального файла (например /about) и проверьте, что IIS отдаёт запрос в MODX, а не статический 404.
  2. В Системных настройках поставьте friendly_urls в Yes.
  3. Очистите кэш сайта.
  4. В шаблоне(ах) задайте базовый URL, чтобы CSS и JS продолжали грузиться, например:
<base href="[[!++site_url]]" />

Если включить friendly_urls до рабочего rewrite, ссылки на ресурсы станут «красивыми», а стили и скрипты сломаются. Сначала почините rewrite, потом меняйте настройку.

Мультиязычные сайты

Дополнения вроде Babel или XRouting сначала требуют рабочих FURL. Когда базовое правило выше уже работает, добавьте дополнительные правила IIS из документации этих дополнений (префиксы языка, домены). В типичном случае на IIS мультиязычность «не ехала», пока не стояли URL Rewrite и корневой web.config.

См. также

Support the team building MODX with a monthly donation.

The budget raised through OpenCollective is transparent, including payouts, and any contributor can apply to be paid for their work on MODX.

Backers

  • modmore
  • STERC
  • Digital Penguin
  • Jens Wittmann – Gestaltung & Entwicklung
  • CrewMark
  • Fabian Christen
  • Sepia River Studios
  • Dannevang Digital
  • Alex
  • A. Moreno
  • Chris Fickling
  • Stéphane Jäggi
  • Murray Wood
  • Anton Tarasov
  • deJaya
  • JT Skaggs
  • Lefthandmedia
  • eydolan
  • Following Sea
  • Guido Gallenkamp
  • YJ
  • Raffy
  • Snow Creative
  • Nick Clark
  • Guest
  • Helen
  • krisznet
  • Yanni
  • Richard

Budget

$204 per month—let's make that $500!

Learn more