在Laracle上将Laravel配置为Wordpress的子目录

时间:2017-09-03 23:27:23

标签: php wordpress iis laravel-5 url-rewriting

由于我无法控制的原因,我需要在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,这显然是不可用的。

任何提示?我确定它很接近,但我无法理解。

1 个答案:

答案 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添加到所有路由中;然而,我们的情况非常独特,所以这两者甚至可以很好地相互配合,这一点令人印象深刻。