Laravel 5 - URL 重写和 CSS 冲突

Posted

技术标签:

【中文标题】Laravel 5 - URL 重写和 CSS 冲突【英文标题】:Laravel 5 - URL Rewriting and CSS conflict 【发布时间】:2015-04-15 14:42:47 【问题描述】:

在 Laravel 5 中,我在用于 URL 重写的 .htaccess 和我的 CSS 文件之间存在问题。首先,这是我的项目树:

我的公用文件夹中有一个 .htaccess,如图所示。这是我的 .htaccess 的内容:

<IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
        Options -Indexes
    </IfModule>

    RewriteEngine On

    # Redirect Trailing Slashes...
    RewriteRule ^(.*)/$ /$1 [L,R=301]
    RewriteRule ^ index.php [L]

    # Handle Front Controller...
    RewriteCond %REQUEST_FILENAME !-d
    RewriteCond %REQUEST_FILENAME !-f
</IfModule>

这是我用来删除 URL 中的“index.php”的代码。例如,http://localhost/mySite/public/index.php/about 变为 http://localhost/mySite/public/about

现在,我有一个母版页(在/resources/views/ 中),在这个母版页中我想引用位于/public/css/style.css 的css 文件。我在我的母版页中添加了这段代码:

&lt;link rel='stylesheet' href=" URL::asset('css/style.css') " &gt;

这不适用于当前的 htaccess,但如果我在我的 htaccess 中注释 RewriteRule ^ index.php [L] 行并访问 URL(使用“index.php”),则样式表被很好地引用。我想我必须在 htaccess 中添加另一行,但我不知道我必须添加什么。

我希望你能帮助我,并毫不犹豫地询问更多细节。谢谢。

【问题讨论】:

您对.htaccess 规则的重新排序破坏了它们。在改变之前了解它们。两行 RewriteCond 会改变以下 RewriteRule 的行为 - 没有后续行,它们将无效。 【参考方案1】:

为什么要更改default .htaccess?

应该是这样的:

<IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
        Options -MultiViews
    </IfModule>

    RewriteEngine On

    # Redirect Trailing Slashes...
    RewriteRule ^(.*)/$ /$1 [L,R=301]

    # Handle Front Controller...
    RewriteCond %REQUEST_FILENAME !-d
    RewriteCond %REQUEST_FILENAME !-f
    RewriteRule ^ index.php [L]
</IfModule>

两个RewriteCond 阻止将文件请求路由到 Laravel。但它们必须RewriteRule 之前生效。

【讨论】:

RewriteRule ^ index.php [L]这很难,保持原样RewriteRule ^(.*)$ index.php/$1 [L] @Gal 我不明白你的意思。 我不知道为什么,但是当我创建项目时,默认的 htaccess 不是这样的。无论如何,谢谢你的提示! @lukasgeiter 而不是RewriteRule ^ index.php [L] 保持为RewriteRule ^(.*)$ index.php/$1 [L] @Moussamoa 我想你不知何故不小心移动了这条线......删除 URL 中的 public 的最简单方法是创建一个虚拟主机并让该点的文档根直接指向 @ 987654330@目录。

以上是关于Laravel 5 - URL 重写和 CSS 冲突的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 5 - 如何更改 route() 和 assets() url

URL 重写后缺少 CSS 文件和图像

IIS url 重写 - css 和 js 被错误地重写

URL 重写:css、js 和图像未加载

Webpack:如何在 .css 中重写 URL

从 Laravel 4 URL 中删除 index.php 并将 www 重写为非 www