Вопрос или проблема
У меня есть установка WP в собственной папке (my-domain.com/site), и я пытаюсь, чтобы сайт работал через my-domain.com. Я не перемещаю файлы установки, я просто даю WP собственную директорию.
Установка WP работает на сервере IIS. У меня есть файл web.config.
Я уже выполнил шаги, которые указаны в Codex WordPress:
- Измените адрес сайта на my-domain.com.
- Копируйте (не перемещайте) файл index.php и ПЕРЕМЕСТИТЕ файл web.config, оба в корневую директорию.
- В файле 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
, чтобы правильно обрабатывать запросы.
Контекст проблемы
Исходная ситуация:
- Установка WordPress находится в папке
/site
, но она должна работать по адресуmy-domain.com
. - Корневой файл
index.php
был скопирован, а файлweb.config
перемещен в корневую директорию. - Было изменено содержимое
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 обрабатывать динамические запросы.
Важные моменты
-
Проверка загрузки модулей IIS: Убедитесь, что модуль переписывания URL включен на вашем IIS-сервере.
-
Тестирование настроек: После внесения изменений протестируйте сайт, чтобы убедиться, что все страницы загрузятся правильно без использования строки
/index.php/
. -
Резервное копирование: Всегда создавайте резервные копии оригинальных конфигурационных файлов перед изменениями.
Заключение
Следуя описанным рекомендациям, вы сможете удалить index.php
из URL на сервере IIS. Основной акцент делается на правильной настройке web.config
, что даст вам больше гибкости в использовании SEO-оптимизированных и чистых URL.