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 หรือไม่
นี่คือภาพร่างของไดเร็กทอรีทรี:
+ เว็บไซต์เริ่มต้น
| + ลาราเวล
| | + สาธารณะ
| | | + จส
| | | | -site.js
| | | -index.php
| + จส
| | - ourownjs.js
| -index.php
เรามีกฎการเขียนซ้ำ 2 กฎที่ตั้งค่าไว้เพื่อจัดการกับการเปลี่ยนเส้นทาง 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>