IIS不支持.css &.js文件用于Laravel站点


IIS not serving .css & .js files for Laravel site

我有一个问题,我正在工作的一个网站。css抛出404错误,它已经给了我一天多的问题了。我最近用IIS10在我的机器上本地托管了一个Laravel 5站点。我有一个主布局存储在/views/layouts (layout.blade.php),我包括这样的样式表:

<head>
    ...
    <link href="{{URL::asset('css/bootstrap.min.css')}}" rel="stylesheet" />
    <link href="{{URL::asset('css/font-awesome.min.css')}}" rel="stylesheet" />
    <link href="{{URL::asset('css/prettyPhoto.css')}}" rel="stylesheet" />
    <link href="{{URL::asset('css/price-range.css')}}" rel="stylesheet" />
    <link href="{{URL::asset('css/animate.css')}}" rel="stylesheet" />
    <link href="{{URL::asset('css/main.css')}}" rel="stylesheet" />
    <link href="{{URL::asset('css/responsive.css')}}" rel="stylesheet" />
     ...
</head>

现在,如果我打开浏览器并导航到http://localhost/testrongite/public/,我的所有视图都没有任何样式。打开开发人员工具有七个错误:

HTTP404: NOT FOUND - The server has not found anything matching the requested URI. (XHR): GET - http://localhost/test_site/public/css/<filename>.css

我很困惑,为什么如果路径被显示到css文件是正确的,那么为什么它不会呈现你所期望的。我最初的想法是我的网站有问题。配置文件,我把它作为:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <staticContent>
            <remove fileExtension=".css" />
            <mimeMap fileExtension=".css" mimeType="text/css" />
            <remove fileExtension=".js" />
            <mimeMap fileExtension=".js" mimeType="application/javascript" />
            <remove fileExtension=".jpg" />
            <mimeMap fileExtension=".jpg" mimeType="image/jpeg" />
            <remove fileExtension=".png" />
            <mimeMap fileExtension=".png" mimeType="image/png" />
        </staticContent>
        <rewrite>
            <rules>
                <rule name="Rewrite rule1 for laravel_rewrite">
                <match url=".*" />
                <conditions>
                     <add input="{laravel_rewrite:{HTTP_HOST}}" pattern="(.+)" />
                </conditions>
                <action type="Rewrite" url="{C:1}{REQUEST_URI}" appendQueryString="false" />
            </rule>
            <rule name="Rule 2" stopProcessing="true">
                <match url="^" ignoreCase="false" />
                <conditions>
                    <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="/Tutorial/public/" />
            </rule>
            <rule name="Rewrite routed access to assets(img, css, files, js, favicon)" stopProcessing="true">
                <match url="^(img|css|files|js|favicon.ico)(.*)$" />
                <action type="Rewrite" url="/Tutorial/public/{R:1}{R:2}" appendQueryString="false" />
            </rule>
        </rules>
        <rewriteMaps>
            <rewriteMap name="laravel_rewrite">
                <add key="localhost" value="/Tutorial/public" />
            </rewriteMap>
        </rewriteMaps>
    </rewrite>
</system.webServer>
</configuration> 

我最初生成了网络。使用IIS中的URL Rewrite模块配置文件(存储在公共文件夹中),但是<staticContent>...</staticContent>和第三条规则之间的添加是我试图解决这个问题。

我还认为问题可能是处理程序映射,特别是使用*通配符作为RequestPath的StaticFile。我把那个留在原地,但我也定义了*.css*.js的单独处理程序,这没有帮助。

谁有什么建议,我可以尝试其他的事情吗?为了澄清,这里有一些关于我的设置的附加信息:
  • Windows特性Static Content已经启用(我也禁用并重新启用了其他一些网站建议)。
  • IUSR具有访问站点所有文件夹的适当权限。

提前感谢任何可以帮助的人!

所以在弄乱了一些事情之后,包括为每个单独的文件类型创建新的处理程序映射等等,我删除了我的web。配置并创建了一个新文件,它已经为我完成了任务:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
    <rewrite>
        <rules>
            <rule name="Imported Rule 1" stopProcessing="true">
                <match url="^(.*)/$" ignoreCase="false" />
                <conditions>
                    <add input="{REQUEST_FILENAME}" matchType="IsDirectory" ignoreCase="false" negate="true" />
                </conditions>
                <action type="Redirect" redirectType="Permanent" url="public/{R:1}" />
            </rule>
            <rule name="Imported Rule 2" stopProcessing="true">
                <match url="^" ignoreCase="false" />
                <conditions>
                    <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>
</configuration>

现在一切都按照你期望的那样运行了

创建一个新的文件web。在根目录中配置并粘贴它之后,您可以通过简单的前置路径: http://domainName.com/public/image.jpeg
After Path: http://domainName.com/image.jpeg

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <defaultDocument>
            <files>
                <clear />
                <add value="index.php" />
            </files>
        </defaultDocument>
        <rewrite>
            <rules>
                <rule name="Laravel Force public">
                    <match url="(.*)" ignoreCase="false" />
                    <action type="Rewrite" url="public/{R:1}" />
                </rule>
                <rule name="Laravel Routes" stopProcessing="true">
                    <conditions>
                        <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
                        <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
                    </conditions>
                    <match url="^" ignoreCase="false" />
                    <action type="Rewrite" url="public/index.php" />
                </rule>
            </rules>
        </rewrite>
    </system.webServer>
</configuration>