首页 文章

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

提问于
浏览
2

A question on Wordpress Multisite running on Windows Azure using Sub-directories: does it work? how do you do it?.

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

那么,例如,基础网站:

http://mywordpressmultisite.azurewebsites.net

工作良好 . 但是多站点:

http://mywordpressmultisite.azurewebsites.net/site2/ http://mywordpressmultisite.azurewebsites.net/site3/

显示一个没有样式的CSS网站,但由于我没有管理员权限,我无法对它们做任何事情;也许是路由错误 .

More Details

我已经按照这篇文章: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);

Things I've tried

  • 使用免费和共享主机解决方案 .

  • 检查固定链接在标准wordpress和基础No1站点上工作(所以mywordpressmultisite.azurewebsites.net/helloworld工作) .

  • 清理数据库并再次启动整个过程 .

  • 更改文件权限以允许读,写和执行;以防万一 .

Debugging

我已经在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);

Where I am 我'm flat out of ideas on how to get this work, and I'我开始怀疑它是否确实在Azure上用于子目录?我在网上看到过这个问题的其他参考但没有解决方案 .

1 回答

  • 3

    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文件派生而来的 .

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

    Web.config文件差异

    引用工作web.config中的规则与那些不起作用的规则相关:

    • 规则1:完全相同 .

    • 规则2:这是一个附加规则 . 回顾Wordpress文档,Wordpress版本3.5(全新安装)不再需要此规则,因为不再使用ms-files.php,因此可以将其删除 .

    • [以下规则现在不同步!]

    • 规则3:与非工作web.config的规则2相同 .

    • 规则4:与orignal web.config的规则3相同 .

    • 规则5.几乎相同,但后面的引用url = ""是不同的 . 工作版本使用url = "" . 我也看到过其他地方引用过的修复程序 .

    • 规则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>
    

相关问题