【发布时间】:2018-02-12 04:42:59
【问题描述】:
由于我无法控制的原因,我需要在 IIS 10 中将 Laravel 实例作为 WordPress 的子目录运行。我在 web.config <system.webServer><rewrite><rules /> 配置中尝试了所有可能的选项,但我只能得到一个或另一个工作。如果我为 WordPress 保留重写规则,Laravel 不起作用(WordPress 以 404 响应),如果我禁用 WordPress 规则,Laravel 可以工作,但显然 WordPress 不能。
这是站点根目录(WordPress 所在的位置)的配置:
<rewrite>
<rules>
<rule name="WordPress" patternSyntax="Wildcard">
<match url="*" />
<conditions>
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
<!-- Laravel App -->
<add input="{REQUEST_URI}" pattern="^/laravel" negate="true" />
</conditions>
<action type="Rewrite" url="index.php" />
</rule>
</rules>
</rewrite>
感谢 SO 搜索,我发现了这个 (IIS Url Rewrite not working with nested WP installs),它让我在 Laravel 应用程序的子文件夹中放置了一个嵌套的 web.config,其中包含以下内容:
<rewrite>
<rules>
<clear />
<rule name="Imported Rule 2" stopProcessing="true">
<match url="/(.*)$" ignoreCase="false" />
<conditions logicalGrouping="MatchAll">
<add input="{REQUEST_FILENAME}" matchType="IsFile" ignoreCase="false" negate="true" />
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" ignoreCase="false" negate="true" />
</conditions>
<action type="Rewrite" url="public/index.php/{R:1}" />
</rule>
</rules>
</rewrite>
奇怪的是,有了这些,它几乎可以工作了——只要我访问 site.com/laravel/public,所有相关的视图都可以正常工作,并且一切都可以很好地协同工作。我似乎无法从 URL 中获取 /public,这显然是不可用的。
有什么建议吗?我确定它很接近,但我无法弄清楚。
【问题讨论】:
标签: php wordpress iis laravel-5 url-rewriting