由于我无法控制的原因,我需要在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,这显然是不可用的。
任何提示?我确定它很接近,但我无法理解。
答案 0 :(得分:2)
知道了!我还是Laravel的新手,所以这件事早就没有了,但我有几个问题。我的根web.config
文件设置正确,但嵌套的web.config
需要match url="*"
,如下所示:
<rewrite>
<rules>
<clear />
<rule name="Imported Rule 2" stopProcessing="true" patternSyntax="Wildcard">
<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>
一旦完成,他们都在工作,但是没有在URL上包含/public
,我得到了404错误 - Laravel的404,特别是这意味着它正在工作,只是不知道我是什么请求。作为总猜测,我查看了我的路线,并在他们面前添加了子目录,突然他们都工作了!例如:
Route::get('/laravel/entities', 'EntitiesController@index');
我不特别喜欢将root添加到所有路由中;然而,我们的情况非常独特,所以这两者甚至可以很好地相互配合,这一点令人印象深刻。