如何使用子目录在Azure上设置Wordpress多站点
关于使用子目录在Windows Azure上运行的Wordpress Multisite的一个问题:它能工作吗?你是怎么做到的? 我已经从Azure Gallery安装了Wordpress(4.2.2),更新了wp.config.php和web.config文件以启用和安装多站点,但结果是一个半工作的解决方案:安装了多站点,我可以创建和删除新站点,但新站点没有css样式(404错误),我无法访问它们的管理仪表盘(404:您正在查找的资源已被删除、名称已更改或暂时不可用) 例如,基础网站: 工作正常。但多站点: 显示一个未设置样式的css网站,但我不能真正使用它们,因为我没有管理员访问权限;可能是路由错误 更多详细信息 我遵循了这篇如何操作的文章:,在Azure上为子目录设置Wordpress Multisite。我没有遵循题为“添加自定义域”的部分,因为我不想这样做(无论如何,现在) 我的web.config文件是:如何使用子目录在Azure上设置Wordpress多站点,wordpress,azure,multisite,Wordpress,Azure,Multisite,关于使用子目录在Windows Azure上运行的Wordpress Multisite的一个问题:它能工作吗?你是怎么做到的? 我已经从Azure Gallery安装了Wordpress(4.2.2),更新了wp.config.php和web.config文件以启用和安装多站点,但结果是一个半工作的解决方案:安装了多站点,我可以创建和删除新站点,但新站点没有css样式(404错误),我无法访问它们的管理仪表盘(404:您正在查找的资源已被删除、名称已更改或暂时不可用) 例如,基础网站: 工作
<?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>
我尝试过的事情
- 使用免费和共享托管解决方案
- 检查permalinks在标准wordpress和1号基本站点(so)上的工作 mywordpressmultisite.azurewebsites.net/helloworld works)
- 清理数据库并再次启动整个过程
- 更改文件权限以允许读取、写入和执行;以防万一
define('WP_DEBUG', true);
define('WP_DEBUG_LOG', true);
define('WP_DEBUG_DISPLAY', true);
@ini_set('display_errors', 0);
我在哪里
我对如何完成这项工作已经没有任何想法了,我开始怀疑它是否真的能在Azure的子目录上工作?我在web上看到过其他关于这个问题的参考,但没有解决方案。IIS上的这个stackoverflow问题有答案: 它为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>
也许有助于解决这个问题
编辑:
这些IIS web.config路由重写规则似乎基于此处给出的Apache.htaccess和Mod rewrite规则:
我在上面找到并使用的web.config确实有效,它似乎是从一个.htaccess文件派生出来的,该文件的目标是<3.5的Wordpress版本
其中,作为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如何处理多站点路由时,很难确定web.config文件中应该包含什么内容。以上答案基于.htaccess文件的建议设置。本文:解释wordpress如何处理路由。我已经试用了您的web.config的上一个版本,它可以正常工作。感谢您提供详细的经验lanation:)从过去24小时以来,我一直在尝试解决多站点资源404问题,您的重写规则版本帮助我解决了这个问题。非常感谢,你是救世主。
<?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>