如何使用 sub-directories 在 Azure 上 set-up Wordpress Multi-sites
How to set-up Wordpress Multi-sites on Azure using sub-directories
使用 Sub-directories 在 Windows Azure 上关于 Wordpress Multisite 运行 的一个问题:它有效吗?你是怎么做到的?
我已经从 Azure Gallery 安装了 Wordpress(4.2.2),更新了 wp.config.php 和 web.config 文件以启用和安装 Multisites,但结果是一个半工作的解决方案:Multi-sites 已安装,我可以创建和删除新网站,但新网站没有 css 样式(404 错误),我无法访问他们的管理仪表板(404:您正在寻找的资源已被删除、更名或暂时不可用)。
因此,例如,基础网站:
http://mywordpressmultisite.azurewebsites.net
工作正常。但是 multi-sites:
http://mywordpressmultisite.azurewebsites.net/site2/
http://mywordpressmultisite.azurewebsites.net/site3/
显示一个没有样式的 css 网站,但我真的不能对它们做任何事情,因为我没有管理员权限;可能是路由错误。
更多详情
我已经遵循了这篇文章:https://azure.microsoft.com/en-gb/documentation/articles/web-sites-php-convert-wordpress-multisite/,到 set-up Azure 上的 Wordpress Multisite for sub-directories。我没有关注标题为“添加自定义域”的部分,因为我不想这样做(无论如何)。
我的 web.config 文件是:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<rewrite>
<rules>
<rule name="WordPress Rule 1" stopProcessing="true">
<match url="^index\.php$" ignoreCase="false" />
<action type="None" />
</rule>
<rule name="WordPress Rule 2" stopProcessing="true">
<match url="^([_0-9a-zA-Z-]+/)?wp-admin$" ignoreCase="false" />
<action type="Redirect" url="{R:1}wp-admin/" redirectType="Permanent" />
</rule>
<rule name="WordPress Rule 3" stopProcessing="true">
<match url="^" ignoreCase="false" />
<conditions logicalGrouping="MatchAny">
<add input="{REQUEST_FILENAME}" matchType="IsFile" ignoreCase="false" />
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" ignoreCase="false" />
</conditions>
<action type="None" />
</rule>
<rule name="WordPress Rule 4" stopProcessing="true">
<match url="^([_0-9a-zA-Z-]+/)?(wp-(content|admin|includes).*)" ignoreCase="false" />
<action type="Rewrite" url="{R:1}" />
</rule>
<rule name="WordPress Rule 5" stopProcessing="true">
<match url="^([_0-9a-zA-Z-]+/)?([_0-9a-zA-Z-]+/)?(.*\.php)$" ignoreCase="false" />
<action type="Rewrite" url="{R:2}" />
</rule>
<rule name="WordPress Rule 6" stopProcessing="true">
<match url="." ignoreCase="false" />
<action type="Rewrite" url="index.php" />
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>
我的wp-config.php是:
define( 'WP_ALLOW_MULTISITE', true );
define('MULTISITE', true);
define('SUBDOMAIN_INSTALL', false);
define('DOMAIN_CURRENT_SITE', 'mywordpressmultisite.azurewebsites.net');
define('PATH_CURRENT_SITE', '/');
define('SITE_ID_CURRENT_SITE', 1);
define('BLOG_ID_CURRENT_SITE', 1);
我尝试过的事情
- 同时使用免费和共享托管解决方案。
- 检查永久链接在标准 wordpress 和基础 No1 站点上是否有效(所以
mywordpressmultisite.azurewebsites.net/helloworld 有效)。
- 清理数据库并重新开始整个过程。
- 更改文件权限以允许读取、写入和执行;以防万一
调试
我已经在 Windows Azure 上配置了 WebApp 来记录所有可能的信息,但它没有吐出任何东西。 php_error.log 或我能找到的其他日志文件中没有任何内容。我已经按如下方式配置了 wordpress wp-config.php,但是我仍然找不到任何生成的内容:
define('WP_DEBUG', true);
define('WP_DEBUG_LOG', true);
define('WP_DEBUG_DISPLAY', true);
@ini_set('display_errors', 0);
我在哪里
我对如何让这项工作完全没有想法,我开始怀疑它是否真的可以在 sub-directories 的 Azure 上工作?我在网上看到了其他关于此问题的参考资料,但没有找到解决方案。
这个关于 IIS 的 Whosebug 问题有答案:
getting 404 error on admin panel for sub-directory multisite on a sub-domain in wordpress
它为web.config
给出了这个XML
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<rewrite>
<rules>
<rule name="WordPress Rule 1" stopProcessing="true">
<match url="^index\.php$" ignoreCase="false" />
<action type="None" />
</rule>
<rule name="WordPress Rule 2" stopProcessing="true">
<match url="^([_0-9a-zA-Z-]+/)?files/(.+)" ignoreCase="false" />
<action type="Rewrite" url="wp-includes/ms-files.php?file={R:2}" appendQueryString="false" />
</rule>
<rule name="WordPress Rule 3" stopProcessing="true">
<match url="^([_0-9a-zA-Z-]+/)?wp-admin$" ignoreCase="false" />
<action type="Redirect" url="{R:1}wp-admin/" redirectType="Permanent" />
</rule>
<rule name="WordPress Rule 4" stopProcessing="true">
<match url="^" ignoreCase="false" />
<conditions logicalGrouping="MatchAny">
<add input="{REQUEST_FILENAME}" matchType="IsFile" ignoreCase="false" />
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" ignoreCase="false" />
</conditions>
<action type="None" />
</rule>
<rule name="WordPress Rule 5" stopProcessing="true">
<match url="(^[_0-9a-zA-Z-]+/)?(wp-(content|admin|includes).*)" ignoreCase="false" />
<action type="Rewrite" url="{R:2}" />
</rule>
<rule name="WordPress Rule 6" stopProcessing="true">
<match url="^([_0-9a-zA-Z-]+/)?(.*\.php)$" ignoreCase="false" />
<action type="Rewrite" url="{R:2}" />
</rule>
<rule name="WordPress Rule 7" stopProcessing="true">
<match url="." ignoreCase="false" />
<action type="Rewrite" url="index.php" />
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>
我已将其上传到 Azure,它可以正常工作。现在可以访问主题和仪表板。
不确定原始 web.config 中的错误在哪里,我想知道,因为 Wordpress 似乎提供了错误的 web.config xml,但是 http://www.iis.net/learn/extensions/url-rewrite-module/url-rewrite-module-configuration-reference 可能会帮助解决这个问题。
编辑:
这些 IIS web.config 路由重写规则似乎是基于此处给出的 Apache .htaccess 和 Mod 重写规则:https://codex.wordpress.org/Multisite_Network_Administration
我在上面找到并使用的 web.config 确实有效,它似乎是从 .htaccess 文件派生的,该文件针对 < 3.5 的 Wordpress 版本。
作为 Mulisite 安装的一部分,Wordpress 提供的原始版本基于针对 Wordpress 3.5+ 的 .htaccess 文件。
Web.config 文件差异
参考工作中的规则 web.config 与不工作的规则的关系:
- 规则 1:相同。
- 规则 2:这是一条附加规则。查看 Wordpress 文档 Wordpress 版本 3.5+(全新安装)不再需要此规则,因为不再使用 ms-files.php,因此可以将其删除。
- [以下规则现在不同步!]
- 规则 3:与非工作相同 web.config 的规则 2。
- 规则 4:与原始 web.config 的规则 3 相同。
- 规则5。几乎相同,但后向引用url="{R:1}" 不同。工作版本使用 url="{R:2}"。我也在其他地方看到了此修复程序。
- 规则6:与原文件中的规则5类似,但正则表达式更短;但是,在我看来,这些正则表达式可能是同一回事。我坚持使用较短的版本。
- 规则 7:与原规则 6 相同 web.config。
给我留下一个修改后的版本,现在看起来像这样:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<rewrite>
<rules>
<rule name="WordPress Rule 1 Identical" stopProcessing="true">
<match url="^index\.php$" ignoreCase="false" />
<action type="None" />
</rule>
<rule name="WordPress Rule 3 Identical" stopProcessing="true">
<match url="^([_0-9a-zA-Z-]+/)?wp-admin$" ignoreCase="false" />
<action type="Redirect" url="{R:1}wp-admin/" redirectType="Permanent" />
</rule>
<rule name="WordPress Rule 4 Identical" stopProcessing="true">
<match url="^" ignoreCase="false" />
<conditions logicalGrouping="MatchAny">
<add input="{REQUEST_FILENAME}" matchType="IsFile" ignoreCase="false" />
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" ignoreCase="false" />
</conditions>
<action type="None" />
</rule>
<rule name="WordPress Rule 5 R2" stopProcessing="true">
<match url="^([_0-9a-zA-Z-]+/)?(wp-(content|admin|includes).*)" ignoreCase="false" />
<action type="Rewrite" url="{R:2}" />
</rule>
<rule name="WordPress Rule 6 Shorter" stopProcessing="true">
<match url="^([_0-9a-zA-Z-]+/)?(.*\.php)$" ignoreCase="false" />
<action type="Rewrite" url="{R:2}" />
</rule>
<rule name="WordPress Rule 7 Identical" stopProcessing="true">
<match url="." ignoreCase="false" />
<action type="Rewrite" url="index.php" />
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>
使用 Sub-directories 在 Windows Azure 上关于 Wordpress Multisite 运行 的一个问题:它有效吗?你是怎么做到的?
我已经从 Azure Gallery 安装了 Wordpress(4.2.2),更新了 wp.config.php 和 web.config 文件以启用和安装 Multisites,但结果是一个半工作的解决方案:Multi-sites 已安装,我可以创建和删除新网站,但新网站没有 css 样式(404 错误),我无法访问他们的管理仪表板(404:您正在寻找的资源已被删除、更名或暂时不可用)。
因此,例如,基础网站:
http://mywordpressmultisite.azurewebsites.net
工作正常。但是 multi-sites:
http://mywordpressmultisite.azurewebsites.net/site2/ http://mywordpressmultisite.azurewebsites.net/site3/
显示一个没有样式的 css 网站,但我真的不能对它们做任何事情,因为我没有管理员权限;可能是路由错误。
更多详情
我已经遵循了这篇文章:https://azure.microsoft.com/en-gb/documentation/articles/web-sites-php-convert-wordpress-multisite/,到 set-up Azure 上的 Wordpress Multisite for sub-directories。我没有关注标题为“添加自定义域”的部分,因为我不想这样做(无论如何)。
我的 web.config 文件是:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<rewrite>
<rules>
<rule name="WordPress Rule 1" stopProcessing="true">
<match url="^index\.php$" ignoreCase="false" />
<action type="None" />
</rule>
<rule name="WordPress Rule 2" stopProcessing="true">
<match url="^([_0-9a-zA-Z-]+/)?wp-admin$" ignoreCase="false" />
<action type="Redirect" url="{R:1}wp-admin/" redirectType="Permanent" />
</rule>
<rule name="WordPress Rule 3" stopProcessing="true">
<match url="^" ignoreCase="false" />
<conditions logicalGrouping="MatchAny">
<add input="{REQUEST_FILENAME}" matchType="IsFile" ignoreCase="false" />
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" ignoreCase="false" />
</conditions>
<action type="None" />
</rule>
<rule name="WordPress Rule 4" stopProcessing="true">
<match url="^([_0-9a-zA-Z-]+/)?(wp-(content|admin|includes).*)" ignoreCase="false" />
<action type="Rewrite" url="{R:1}" />
</rule>
<rule name="WordPress Rule 5" stopProcessing="true">
<match url="^([_0-9a-zA-Z-]+/)?([_0-9a-zA-Z-]+/)?(.*\.php)$" ignoreCase="false" />
<action type="Rewrite" url="{R:2}" />
</rule>
<rule name="WordPress Rule 6" stopProcessing="true">
<match url="." ignoreCase="false" />
<action type="Rewrite" url="index.php" />
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>
我的wp-config.php是:
define( 'WP_ALLOW_MULTISITE', true );
define('MULTISITE', true);
define('SUBDOMAIN_INSTALL', false);
define('DOMAIN_CURRENT_SITE', 'mywordpressmultisite.azurewebsites.net');
define('PATH_CURRENT_SITE', '/');
define('SITE_ID_CURRENT_SITE', 1);
define('BLOG_ID_CURRENT_SITE', 1);
我尝试过的事情
- 同时使用免费和共享托管解决方案。
- 检查永久链接在标准 wordpress 和基础 No1 站点上是否有效(所以 mywordpressmultisite.azurewebsites.net/helloworld 有效)。
- 清理数据库并重新开始整个过程。
- 更改文件权限以允许读取、写入和执行;以防万一
调试
我已经在 Windows Azure 上配置了 WebApp 来记录所有可能的信息,但它没有吐出任何东西。 php_error.log 或我能找到的其他日志文件中没有任何内容。我已经按如下方式配置了 wordpress wp-config.php,但是我仍然找不到任何生成的内容:
define('WP_DEBUG', true);
define('WP_DEBUG_LOG', true);
define('WP_DEBUG_DISPLAY', true);
@ini_set('display_errors', 0);
我在哪里 我对如何让这项工作完全没有想法,我开始怀疑它是否真的可以在 sub-directories 的 Azure 上工作?我在网上看到了其他关于此问题的参考资料,但没有找到解决方案。
这个关于 IIS 的 Whosebug 问题有答案:
getting 404 error on admin panel for sub-directory multisite on a sub-domain in wordpress
它为web.config
给出了这个XML<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<rewrite>
<rules>
<rule name="WordPress Rule 1" stopProcessing="true">
<match url="^index\.php$" ignoreCase="false" />
<action type="None" />
</rule>
<rule name="WordPress Rule 2" stopProcessing="true">
<match url="^([_0-9a-zA-Z-]+/)?files/(.+)" ignoreCase="false" />
<action type="Rewrite" url="wp-includes/ms-files.php?file={R:2}" appendQueryString="false" />
</rule>
<rule name="WordPress Rule 3" stopProcessing="true">
<match url="^([_0-9a-zA-Z-]+/)?wp-admin$" ignoreCase="false" />
<action type="Redirect" url="{R:1}wp-admin/" redirectType="Permanent" />
</rule>
<rule name="WordPress Rule 4" stopProcessing="true">
<match url="^" ignoreCase="false" />
<conditions logicalGrouping="MatchAny">
<add input="{REQUEST_FILENAME}" matchType="IsFile" ignoreCase="false" />
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" ignoreCase="false" />
</conditions>
<action type="None" />
</rule>
<rule name="WordPress Rule 5" stopProcessing="true">
<match url="(^[_0-9a-zA-Z-]+/)?(wp-(content|admin|includes).*)" ignoreCase="false" />
<action type="Rewrite" url="{R:2}" />
</rule>
<rule name="WordPress Rule 6" stopProcessing="true">
<match url="^([_0-9a-zA-Z-]+/)?(.*\.php)$" ignoreCase="false" />
<action type="Rewrite" url="{R:2}" />
</rule>
<rule name="WordPress Rule 7" stopProcessing="true">
<match url="." ignoreCase="false" />
<action type="Rewrite" url="index.php" />
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>
我已将其上传到 Azure,它可以正常工作。现在可以访问主题和仪表板。
不确定原始 web.config 中的错误在哪里,我想知道,因为 Wordpress 似乎提供了错误的 web.config xml,但是 http://www.iis.net/learn/extensions/url-rewrite-module/url-rewrite-module-configuration-reference 可能会帮助解决这个问题。
编辑:
这些 IIS web.config 路由重写规则似乎是基于此处给出的 Apache .htaccess 和 Mod 重写规则:https://codex.wordpress.org/Multisite_Network_Administration
我在上面找到并使用的 web.config 确实有效,它似乎是从 .htaccess 文件派生的,该文件针对 < 3.5 的 Wordpress 版本。
作为 Mulisite 安装的一部分,Wordpress 提供的原始版本基于针对 Wordpress 3.5+ 的 .htaccess 文件。
Web.config 文件差异
参考工作中的规则 web.config 与不工作的规则的关系:
- 规则 1:相同。
- 规则 2:这是一条附加规则。查看 Wordpress 文档 Wordpress 版本 3.5+(全新安装)不再需要此规则,因为不再使用 ms-files.php,因此可以将其删除。
- [以下规则现在不同步!]
- 规则 3:与非工作相同 web.config 的规则 2。
- 规则 4:与原始 web.config 的规则 3 相同。
- 规则5。几乎相同,但后向引用url="{R:1}" 不同。工作版本使用 url="{R:2}"。我也在其他地方看到了此修复程序。
- 规则6:与原文件中的规则5类似,但正则表达式更短;但是,在我看来,这些正则表达式可能是同一回事。我坚持使用较短的版本。
- 规则 7:与原规则 6 相同 web.config。
给我留下一个修改后的版本,现在看起来像这样:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<rewrite>
<rules>
<rule name="WordPress Rule 1 Identical" stopProcessing="true">
<match url="^index\.php$" ignoreCase="false" />
<action type="None" />
</rule>
<rule name="WordPress Rule 3 Identical" stopProcessing="true">
<match url="^([_0-9a-zA-Z-]+/)?wp-admin$" ignoreCase="false" />
<action type="Redirect" url="{R:1}wp-admin/" redirectType="Permanent" />
</rule>
<rule name="WordPress Rule 4 Identical" stopProcessing="true">
<match url="^" ignoreCase="false" />
<conditions logicalGrouping="MatchAny">
<add input="{REQUEST_FILENAME}" matchType="IsFile" ignoreCase="false" />
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" ignoreCase="false" />
</conditions>
<action type="None" />
</rule>
<rule name="WordPress Rule 5 R2" stopProcessing="true">
<match url="^([_0-9a-zA-Z-]+/)?(wp-(content|admin|includes).*)" ignoreCase="false" />
<action type="Rewrite" url="{R:2}" />
</rule>
<rule name="WordPress Rule 6 Shorter" stopProcessing="true">
<match url="^([_0-9a-zA-Z-]+/)?(.*\.php)$" ignoreCase="false" />
<action type="Rewrite" url="{R:2}" />
</rule>
<rule name="WordPress Rule 7 Identical" stopProcessing="true">
<match url="." ignoreCase="false" />
<action type="Rewrite" url="index.php" />
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>