【问题标题】:Access relative CSS/JS files with htaccess rewrite rule使用 htaccess 重写规则访问相关的 CSS/JS 文件
【发布时间】:2020-11-21 14:37:30
【问题描述】:

最近有人问我是否可以让我的朋友服务器地址更加用户友好。他当前的网址如下所示:

http://wwww.example.com/site/index.php?page=home
http://wwww.example.com/site/index.php?page=about/john
http://wwww.example.com/site/index.php?page=portfolio/concept-art/2013

他希望他们看起来像这样

http://wwww.example.com/site/home
http://wwww.example.com/site/about/john
http://wwww.example.com/site/portfolio/concept-art/2013

我认为这很简单,所以我在重写之后写了这个。

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !/(admin|css|fonts|ico|include|js)/
RewriteRule ^([^_]*)$ index.php?page=$1 [L]

这似乎适用于基本链接,如

http://wwww.example.com/site/home

但是对于这样的事情

http://wwww.example.com/site/about/john

不会加载任何 css 或 js。所以我现在通过将所有文件设置为绝对路径来解决这个问题,但我担心我的朋友会添加一个新插件或其他东西而忘记他必须将其设置为绝对路径。

我的问题

我是否可以在我的 htaccess 文件中更改或添加某些内容以使 css 和 js 文件以相对路径加载?如果是这样,我需要做什么?

【问题讨论】:

    标签: php regex .htaccess mod-rewrite


    【解决方案1】:

    最好使用这条规则:

    RewriteEngine On
    RewriteBase /site/
    
    RewriteCond %{REQUEST_FILENAME} !/(admin|css|fonts|ico|include|js)/
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.+?)/?$ index.php?page=$1 [L,QSA]
    

    那么对于 css/js/images,最好在 css、js、图像文件中使用绝对路径而不是相对路径。这意味着您必须确保这些文件的路径以 http:// 或斜杠 / 开头。

    或者你可以尝试在你的页面标题中添加这个:

    <base href="/" />
    

    <base href="http://domain.com/site/" />
    

    【讨论】:

    • 我不敢相信我什至没有想到 base 总是忘记基本的 HTML 解决方案。哈哈。我添加了一个 php 函数来自动生成基础,以防他移动他的网站,但除此之外,这一切都很好。
    【解决方案2】:

    我是否可以在我的 htaccess 文件中更改或添加某些内容以使 css 和 js 文件以相对路径加载?如果是这样,我需要做什么?

    您可以在页面标题中添加正确的相对 URI 基础:

    <base href="/site/" />
    

    或者您可以使用 mod_rewrite 蛮力重定向它们(不推荐):

    RewriteRule ^(.+)/(admin|css|fonts|ico|include|js)/(.*)$ $2/$3 [L]
    

    【讨论】:

    • 我总是忘记尝试基本的 html 解决方案,例如 base。哈哈。
    猜你喜欢
    • 1970-01-01
    • 2015-12-25
    • 1970-01-01
    • 2013-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多