wordpress - 如何使用子目录在 Azure 上设置 Wordpress 多站点

标签 wordpress azure multisite

关于使用子目录在 Windows Azure 上运行 Wordpress Multisite 的问题:它有效吗?你是怎么做到的?

我已经从 Azure Gallery 安装了 Wordpress(4.2.2),更新了 wp.config.php 和 web.config 文件以启用和安装多站点,但结果是一个半有效的解决方案:安装了多站点,我可以创建和删除新网站,但新网站没有 CSS 样式(404 错误),并且我无法访问其管理仪表板(404:您正在查找的资源已被删除、名称已更改,或者暂时不可用)。

例如,基本网站:

http://mywordpressmultisite.azurewebsites.net

工作正常。但多站点:

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/ ,在 Azure 上为子目录设置 Wordpress Multisite。我没有继续阅读标题为“添加自定义域”的部分,因为我不想这样做(无论如何)。

我的 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);

我在哪里 我完全不知道如何实现这项工作,并且我开始怀疑它是否真的适用于 Azure 的子目录?我在网上看到了有关此问题的其他引用,但没有解决方案。

最佳答案

有关 IIS 的 stackoverflow 问题有答案:

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 确实有效,它似乎是从针对 < 3.5 的 WordPress 版本的 .htaccess 文件派生的。

作为 Mulisite 安装的一部分,Wordpress 提供的原始版本基于针对 Wordpress 3.5+ 的 .htaccess 文件。

Web.config 文件差异

引用工作 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:与原始 web.config 中的规则 6 相同。

给我留下了一个重新设计的版本,现在看起来像这样:

<?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>

关于wordpress - 如何使用子目录在 Azure 上设置 Wordpress 多站点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30804149/

相关文章:

Wordpress 站点完全从一台服务器迁移到另一台 wordpress

php - 在新域/子域上复制 WordPress 站点

php - 脚本试图执行方法或访问不完整对象的属性

python - 使用 Python 从 Azure Key Vault 解码 JsonWebKey

.net - Azure 部署中心在部署时生成错误

mysql - 将负载均衡器添加到 wordpress 多站点安装

javascript - WP 音频简码和 AJAX

php - Wordpress %postname% 永久链接破坏静态主页 (301)

ios - 适用于单独 iPad 和 iPhone 应用程序的 Azure 通知中心配置

wordpress - 仅在 NGINX 中允许通过 IP 白名单访问某些位置