子目录中的 IIS 网站 => 对根目录“/”的 HTML 源请求指向默认网站而不是子目录

子目录中的 IIS 网站 => 对根目录“/”的 HTML 源请求指向默认网站而不是子目录

我们的 IIS 托管着我们自己的网站。但最近我们接到任务,在子目录中托管使用​​ Laravel 构建的第三方网站。

网站正在加载,但由于第三方网站请求资源的方式,大多数资源(如 CSS 和 JS 文件)均未加载 (404)。例如:

<script source="/js/site.js"></script>

/js/site.js翻译为https://defaultwebsite/js/site.js不存在。我需要/js/site.js翻译为https://defaultwebsite/laravel/public/js/site.js

这在 IIS 10 中可以实现吗?

这是目录树的草图:

+ defaultwebsite
| + laravel
| | + public
| | | + js
| | | | - site.js
| | | - index.php
| + js
| | - ourownjs.js
| - index.php

我们设置了两个重写规则来处理重定向,如下https://defaultwebsite/lavarel所示https://defaultwebsite/laravel/public

<system.webServer>
    <rewrite>
        <rules>
            <rule name="Imported Rule 1-1" stopProcessing="true">
                <match url="^" ignoreCase="false" />
                <conditions logicalGrouping="MatchAll">
                    <add input="{HTTP_AUTHORIZATION}" ignoreCase="false" />
                    <add input="{REQUEST_FILENAME}" matchType="IsDirectory" ignoreCase="false" negate="true" />
                    <add input="{URL}" pattern="(.+)/$" ignoreCase="false" />
                </conditions>
                <action type="Redirect" url="{C:1}" redirectType="Permanent" />
            </rule>
            <rule name="Imported Rule 2-1" stopProcessing="true">
                <match url="^" ignoreCase="false" />
                <conditions logicalGrouping="MatchAll">
                    <add input="{REQUEST_FILENAME}" matchType="IsDirectory" ignoreCase="false" negate="true" />
                    <add input="{REQUEST_FILENAME}" matchType="IsFile" ignoreCase="false" negate="true" />
                </conditions>
                <action type="Rewrite" url="index.php" />
            </rule>
        </rules>
    </rewrite>
</system.webServer>

更新 我最近将此规则添加到根目录(默认网站),但当 laravel 网站请求资源时,它似乎没有触发此规则。尽管我可以看到 HTTP_REFERER 模式是正确的。

    <rewrite>
        <rewriteMaps>
            <rewriteMap name="Root" />
        </rewriteMaps>
        <rules>
            <rule name="Rewrite Root => Laravel" stopProcessing="true">
                <match url="(img|js|css)?(.*)" />
                <conditions>
                    <add input="{HTTP_REFERER}" pattern="^https://www.defaultsite.be/laravel(.*)" />
                </conditions>
                <action type="Rewrite" url="laravel/public/{R:1}{R:2}" appendQueryString="true" logRewrittenUrl="true" />
            </rule>
        </rules>
    </rewrite>

答案1

好吧,我自己也不完全理解它。IIS 永远不会成为我的朋友 :)

当我将规则更改为重定向而不是重写时,它开始工作:

<rules>
    <rule name="Rewrite Root => Laravel" stopProcessing="true">
        <match url="(img|js|css)?(.*)" />
        <conditions>
            <add input="{HTTP_REFERER}" pattern="laravel/.*" />
            <!-- <add input="laravel\public\{R:1}{R:2}" matchType="IsFile" /> -->
            
        </conditions>
        <action type="Redirect" url="/laravel/{R:0}" appendQueryString="true" logRewrittenUrl="false" redirectType="Permanent" />
    </rule>
</rules>

相关内容