【问题标题】:.htaccess with 2 parameters messing up css, js, images paths.htaccess 有 2 个参数搞乱 css、js、图像路径
【发布时间】:2013-05-31 12:01:20
【问题描述】:

我在我的网页上处理 URL,但我无法解决具有 2 个参数的 URL 的问题。

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([a-zA-Z0-9-z\-]+)/?$ index.php?strona=$1 [L]
RewriteRule ^([a-zA-Z0-9-z\-]+)/([a-zA-Z0-9-z\-]+)/?$ index.php?strona=$1&id=$2 [L]

URL 看起来不错,只是当我当前的 URL 有 2 个参数时(例如,我在 http://example.com/subpage/5 上,整个网页都损坏了(样式表、导航等)因为 .htaccess 将所有链接更改为:

(for example navigation):
http://example.com/subpage_with_2_parameters/home
instead of
http://example.com/home

只有一个参数的页面(例如:http://example.com/contact)工作正常。

我想到的唯一解决方案(这很可怕)是绝对链接。

【问题讨论】:

    标签: regex apache .htaccess mod-rewrite


    【解决方案1】:

    在实现所谓的漂亮的 URL 后,你不是唯一一个处理 css、js、图像路径混乱的问题的人。我几乎每天都在 SO 上看到这些问题的报告。

    您可以通过 3 种方式解决此问题:

    1. 最佳解决方案是对图像、css 和 js 文件使用绝对路径,即以 /http:// 开始您的路径

    2. 另一种选择是在 HTML 头部中使用基本 href 标记,如下所示:

      <base href="http://www.example.com/">

    3. 第三个选项是通过 mod_rewrite

    将这些行置于您的 .htaccess 文件中的其他 RewriteLine 之上:

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-l
    RewriteCond %{DOCUMENT_ROOT}/$1 -f
    RewriteRule ^[^/]+/([^.]+\.(?:js|css|jpe?g|png|gif))$ /$1 [L,R=301,NC]
    

    【讨论】:

      【解决方案2】:

      破坏样式表的不是您的重写规则,而是您的实际 HTML。如果您有一个名为foo 的实际目录并将index.php 放在其中,也会发生同样的事情。

      如果您写<a href="home">Home</a>,则该链接相对于当前目录(在URL 空间中),因此在具有http://example.com/foo/bar/baz 之类的URL 的页面上,它链接到http://example.com/foo/bar/home

      您想要的是让链接相对于您的域的;为此,您需要一个前导斜杠:<a href="/home">Home</a>

      这之前似乎可行的唯一原因是您所有的 URL 都在根目录中,因此“当前目录”和“域的根目录”是一回事。

      【讨论】:

        猜你喜欢
        • 2010-09-27
        • 2012-10-11
        • 2012-07-22
        • 2019-08-06
        • 2020-09-25
        • 2012-12-28
        • 2013-01-25
        • 2018-07-10
        • 1970-01-01
        相关资源
        最近更新 更多