WordPress multisite htaccess

Я настроил WordPress как многоуровневый и как часть шагов, он дал некоторую инструкцию для обновления и замены файла .htaccess.

WordPress дал мне указание заменить htaccess следующим:

RewriteEngine On RewriteBase / RewriteRule ^index\.php$ - [L] # add a trailing slash to /wp-admin RewriteRule ^wp-admin$ wp-admin/ [R=301,L] RewriteCond %{REQUEST_FILENAME} -f [OR] RewriteCond %{REQUEST_FILENAME} -d RewriteRule ^ - [L] RewriteRule ^(wp-(content|admin|includes).*) $1 [L] RewriteRule ^(.*\.php)$ $1 [L] RewriteRule . index.php [L] 

Однако это вызвало разрыв некоторых jquery в плагине.

Я думал, что это может быть полезно, но может ли кто-нибудь помочь понять, что делает каждая из этих строк?

В частности, эта строка:

 RewriteRule ^(.*\.php)$ $1 [L] 

Поскольку, если я удалю эту строку, мой плагин прекрасно работает.

Заранее спасибо 🙂

Я искал подробную информацию о том, почему эта строка предлагается для многопользовательской установки с использованием поддоменов. Я действительно сомневаюсь в том, что оба они имеют значение для установки поддомена:

 RewriteRule ^(wp-(content|admin|includes).*) $1 [L] RewriteRule ^(.*\.php)$ $1 [L] 

В поддиректории установки правила устанавливаются несколько иначе, чтобы отделить имя подкаталога от запроса, чтобы оно было чем-то вроде:

 RewriteRule ^([_0-9a-zA-Z-]+/)?(wp-(content|admin|includes).*) $2 [L] RewriteRule ^([_0-9a-zA-Z-]+/)?(.*\.php)$ $2 [L] 

Я вижу цикл переадресации в своих журналах ошибок, и это вызвано первой версией этих правил, поскольку текст замены идентичен исходному тексту. Я нашел некоторые доказательства того, что некоторые версии mod_rewrite обнаружат, что исходный и новый текст совпадают, и пропустите повторную вставку результата. (Не знаю, какую из многих ссылок я читал на этом этапе.)

Я не вижу смысла переписывать URI, чтобы быть идентичным оригиналу и, таким образом, заставляя ссылку повторно вставлять в механизм перезаписи. С удалением правил я получаю ожидаемую 404 страницу вместо цикла перенаправления, который заканчивается ошибкой 500 серверов, когда предел перенаправления превышен.

Отдельная заметка, я думаю, что предлагаемая версия подкаталога также нарушена. Потому что он использует ? для части подкаталога он будет зацикливаться на входном URL-адресе, таком как no-such-file.php . Согласование в части подкаталога не должно допускать нулевые копии, поэтому правило должно быть:

  RewriteRule ^[_0-9a-zA-Z-]+/(wp-(content|admin|includes).*) $1 [L] RewriteRule ^[_0-9a-zA-Z-]+/(.*\.php)$ $1 [L] 

Аналогичный вывод можно найти здесь: https://wordpress.stackexchange.com/a/73185/27576

RewriteRule ^wp-admin$ wp-admin/ [R=301,L]
Перенаправляет http: //yourdomain.ext/wp-admin на http: //yourdomain.ext/wp-admin/

RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
Условная логика, проверьте, является ли запрошенное имя файла не существующим файлом ( -f ) или каталогом ( -d ).

RewriteRule ^(wp-(content|admin|includes).*) $1 [L]
Переадресовывайте wp-content.ext , wp-admin.ext и wp-includes.ext самому файлу, существует ли этот файл или нет.

RewriteRule ^(.*\.php)$ $1 [L]
Перенесите любой файл .php в этот файл, независимо от того, существует файл или нет.

RewriteRule . index.php [L]
Перенаправить все на index.php .

В основном, .htaccess перенаправляет каждый запрошенный файл на этот конкретный файл и каждый каталог на index.php .

Ознакомьтесь с подробной документацией mod_rewrite, чтобы узнать, как работает механизм перезаписи.