Удалите index.php из URL в постоянных ссылках на сервере IIS (web.config)

Вопрос или проблема

У меня есть установка WP в собственной папке (my-domain.com/site), и я пытаюсь, чтобы сайт работал через my-domain.com. Я не перемещаю файлы установки, я просто даю WP собственную директорию.

Установка WP работает на сервере IIS. У меня есть файл web.config.

Я уже выполнил шаги, которые указаны в Codex WordPress:

  1. Измените адрес сайта на my-domain.com.
  2. Копируйте (не перемещайте) файл index.php и ПЕРЕМЕСТИТЕ файл web.config, оба в корневую директорию.
  3. В файле index.php (в корневой директории) я изменил эту строку: require( dirname( __FILE__ ) . '/site/wp-blog-header.php' );

Согласно WP Codex для постоянных ссылок без mod_rewrite, в настройках постоянных ссылок (в панели управления) я установил: /index.php/%postname%/. Если я удалю часть index.php из настроек постоянных ссылок, перестанет работать.

На данный момент мои постоянные ссылки работают, но таким образом: my-domain.com/index.php/page_example. Я хочу удалить часть “/index.php/” из URL.

В моем web.config я имею:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
  <system.webServer>
    <rewrite>
      <rules>
        <rule name="wordpress" 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" />
        </rule>
      </rules>
    </rewrite>
  </system.webServer>
</configuration>

Я даже пытался добавить <clear/> перед добавлением правила, но без успеха.

Примечание: Если я оставлю адрес сайта (URL) так: my-domain.com/site и удалю часть “/index.php/” из настроек постоянных ссылок, постоянные ссылки работают хорошо, например: my-domain.com/page_example.

Есть идеи, как это решить? Возможно, я пропускаю какие-то правила в web.config.

На сервере IIS было установлено что-то, что может читать файлы .htaccess; и игнорировало web.config, поэтому документация WP с .htaccess работает для меня.

Пожалуйста, попробуйте ниже в вашем web.config

<?xml version="1.0" encoding="UTF-8"?>
    <configuration>
    <system.web>
        <customErrors mode="Off" />
        <compilation debug="true" />
    </system.web>
    <system.webServer>
        <rewrite>
            <rules>
                <rule name="Imported Rule 1" stopProcessing="true">
                    <match url="^(.*)$" ignoreCase="false" />
                    <conditions logicalGrouping="MatchAll">
                        <add input="{R:1}" pattern="\.(gif|jpe?g|png)$" negate="true" />
                        <add input="{REQUEST_FILENAME}" matchType="IsFile" ignoreCase="false" negate="true" />
                        <add input="{REQUEST_FILENAME}" matchType="IsDirectory" ignoreCase="false" negate="true" />
                    </conditions>
                    <action type="Rewrite" url="/index.php/{R:1}" />
                </rule>
            </rules>
        </rewrite>
    <security>
            <requestFiltering allowDoubleEscaping="true" />
     </security>
    </system.webServer>
</configuration>

Ответ или решение

Удаление index.php из URL в постоянных ссылках WordPress на сервере IIS требует настройки web.config, чтобы правильно обрабатывать запросы.

Контекст проблемы

Исходная ситуация:

  1. Установка WordPress находится в папке /site, но она должна работать по адресу my-domain.com.
  2. Корневой файл index.php был скопирован, а файл web.config перемещен в корневую директорию.
  3. Было изменено содержимое index.php для корректного вызова wp-blog-header.php.

Текущая проблема заключается в том, что постоянные ссылки включают /index.php/, и требуется удалить эту часть из URL.

Пути решения

Настройка файла web.config:
Проблема заключается в переписывании URL, чтобы избежать использования /index.php/. Основная задача — корректно настроить правила переадресации в web.config.

Вот обновленная конфигурация файла web.config:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <rewrite>
            <rules>
                <rule name="WordPress Clean URLs" stopProcessing="true">
                    <match url="^(.*)$" ignoreCase="true" />
                    <conditions logicalGrouping="MatchAll">
                        <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
                        <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
                    </conditions>
                    <action type="Rewrite" url="/site/index.php/{R:1}" />
                </rule>
            </rules>
        </rewrite>
        <security>
            <requestFiltering allowDoubleEscaping="true" />
        </security>
    </system.webServer>
</configuration>

Объяснение элементации

  • Секция match: Определяет, что любое URL (^(.*)$) должно обрабатываться правилом.
  • Секция conditions:
    • Условие игнорирует обработку директория и файла (negate="true"), что позволяет обрабатывать только несуществующие файлы и каталоги.
  • Секция action: URL переписывается на /site/index.php/{R:1}, что позволяет WordPress обрабатывать динамические запросы.

Важные моменты

  1. Проверка загрузки модулей IIS: Убедитесь, что модуль переписывания URL включен на вашем IIS-сервере.

  2. Тестирование настроек: После внесения изменений протестируйте сайт, чтобы убедиться, что все страницы загрузятся правильно без использования строки /index.php/.

  3. Резервное копирование: Всегда создавайте резервные копии оригинальных конфигурационных файлов перед изменениями.

Заключение

Следуя описанным рекомендациям, вы сможете удалить index.php из URL на сервере IIS. Основной акцент делается на правильной настройке web.config, что даст вам больше гибкости в использовании SEO-оптимизированных и чистых URL.

Оцените материал
Добавить комментарий

Капча загружается...