IIS-ul nostru găzduiește propriul nostru site web. Dar recent am fost însărcinați să găzduim un site web terță parte construit folosind Laravel într-un subdirector.
Site-ul se încarcă, dar majoritatea resurselor, cum ar fi fișierele CSS și JS, nu sunt încărcate (404) din cauza modului în care site-ul terță parte solicită resursele sale. De exemplu:
<script source="/js/site.js"></script>
/js/site.js
se traduce prin https://defaultwebsite/js/site.js
care nu există.
am nevoie /js/site.js
a se traduce în https://defaultwebsite/laravel/public/js/site.js
.
Este posibil acest lucru în IIS 10?
Iată o schiță a arborelui director:
+ site web implicit
| + laravel
| | + public
| | | + js
| | | | - site.js
| | | - index.php
| + js
| | - ourownjs.js
| - index.php
Avem două reguli de rescriere configurate pentru a gestiona redirecționarea https://defaultwebsite/lavarel
la https://defaultwebsite/laravel/public
ca aceasta:
<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>
ACTUALIZAȚI
Am adăugat recent această regulă la root (site web implicit), dar nu pare să atingă această regulă atunci când site-ul laravel solicită resurse. Chiar dacă pot vedea că modelul HTTP_REFERER este corect.
<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>