Azure Web アプリ内で正常に動作するようになった Laravel 4 ベースの PHP アプリケーションがあります。唯一の問題は、からファイルにアクセスしようとするとexample.azurewebsites.net/js/vendor/jquery.slicknav.min.js
、「このディレクトリまたはページを表示する権限がありません。 " 応答。
このフォルダーsite/wwwroot
は、すべての Laravel アプリケーション ファイルを配置する場所です。Laravel に慣れていない方のために説明すると、このフォルダーには app、Bootstrap、public、および vendor の 4 つのフォルダーが含まれています。
Azure portal で [仮想アプリケーションとディレクトリ] 設定を、次の内容の web.config ファイルにマップしてパブリック ディレクトリ内に配置/
するように設定しました。site\wwwroot\public
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.webServer>
<urlCompression doDynamicCompression="true" doStaticCompression="true" dynamicCompressionBeforeCache="true"/>
<staticContent>
<remove fileExtension=".svg" />
<mimeMap fileExtension=".svg" mimeType="image/svg+xml" />
<mimeMap fileExtension=".woff" mimeType="application/font-woff" />
<clientCache httpExpires="Sun, 29 Mar 2020 00:00:00 GMT" cacheControlMode="UseExpires" />
</staticContent>
<httpProtocol>
<customHeaders>
<add name="Strict-Transport-Security" value="max-age=31536000; includeSubDomains"/>
<add name="Access-Control-Allow-Origin" value="*" />
<add name="Access-Control-Allow-Headers" value="X-Requested-With,Content-Type" />
<add name="Access-Control-Allow-Methods" value="POST,GET,OPTIONS,DELETE,PUT,PATCH" />
</customHeaders>
</httpProtocol>
<rewrite>
<rules>
<rule name="Laravel4" stopProcessing="true">
<match url="^" ignoreCase="false" />
<conditions logicalGrouping="MatchAll">
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
</conditions>
<action type="Rewrite" url="index.php" appendQueryString="true" />
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>
このセットアップでは、フォルダー名に app、Bootstrap、public、または vendor の場合のように含まれる場合を除いて、書き換えは期待どおりに機能しexample.azurewebsites.net/js/vendor/jquery.slicknav.min.js
ます。
私の質問は、この問題を解決するために書き換えルールを修正するにはどうすればよいですか? site\wwwroot\public\js\vendor\
最後にハイフンを追加してフォルダーの名前を変更すると、機能します。また、コンテナを複数回再起動しました。
編集より明確にするために、これは私のディレクトリ構造です:
├─ wwwroot
│ └─ app
│ └─ bootstrap
│ ├─ public
│ │ └─ css
│ │ └─ files
│ │ └─ fonts
│ │ └─ imgs
│ │ ├─ js
│ │ │ └─ admin
│ │ │ ├─ app
│ │ │ │ └─ link-check.js
│ │ │ └─ old
│ │ │ ├─ vendor
│ │ │ │ └─ sortable.min.js
│ │ └─ less
│ │ └─ packages
│ │ └─ tmp
│ │ └─ uploads
│ └─ vendor
└─ ...
私のweb.config
設定link-check.js
ではexample.azurewebsites.net/js/app/link-check.js
、sortable.min.js は経由でアクセスできませexample.azurewebsites.net/js/vendor/sortable.min.js
ん (また、/js/vendor パス内の他のものにはアクセスできません)。
注: に名前を変更wwwroot\public\js\vendor
すると、からwwwroot\public\js\vendor-
表示できますsortable.min.js
example.azurewebsites.net/js/vendor-/sortable.min.js