【问题标题】:mod_rewrite not working well with trailing slash & css breaks apartmod_rewrite 不能很好地与斜杠 & css 分开
【发布时间】:2010-10-10 15:59:07
【问题描述】:

我只有一个根目录,其中包含 index.php 以及两个文件夹 img 和 css。 我指的是此文件夹中的文件,例如: src="img/path.png" 即相对于根目录。

前几天我有一些 mod_rewrite 问题,这是有人给我的,除了尾部斜杠和 css/img 分开之外,这似乎很好用

重写规则 ^$ index.php?page=1 [L]

重写规则 ^([0-9]+)/?$ index.php?page=$1 [L]

重写规则 ^([A-Za-z]+)/?$ index.php?category=$1&page=1 [L]

重写规则 ^([A-Za-z]+)/([0-9]+)/?$ index.php?category=$1&page=$2 [L]

这是困扰我的:

使用规则1:

www.example.com 更改为 www.example.com/index.php?page=1 这很棒 还有 www.example.com/ 对 www.example.com 的一些更改,这又很棒

使用规则2:

www.example.com/2 更改为 www.example.com/index.php?page=2 就像我想要的一样 但是使用 www.example.com/2/ (TRAILING SLASH) 也会检索 page=2 但不知何故 img 和 css 会分开。 我猜问题是 url 被视为目录结构,然后在那里找不到 img 和 css 文件夹。

使用规则 3:

www.example.com/Football 再次更改为 www.example.com/index.php?category=Football&page=1 就像我想要的一样 但是 www.example.com/Football/ (TRAILING SLASH) 在 img 和 css 分离时遇到了同样的问题

使用规则 4:

www.www.example.com/Football/2 即使在 css 和 img 上没有斜杠分解,但页面可以正确检索页面和类别。

如何在不必在我的 html 中使用绝对路径的情况下更正此问题。 也请就斜杠问题提出建议。

【问题讨论】:

  • ErrorDocument 404 index.php 这似乎对我不起作用。有什么想法吗?

标签: php apache mod-rewrite


【解决方案1】:

你能不能不使用 relative 来引用你的图像/css,而是以 / 开头?

/images/blah.jpg
/css/style.css

【讨论】:

  • 是的,应该这样做。 /images/blah.jpg 意味着从根目录看,对吧?
  • 没错。它将从主机域加载
【解决方案2】:

您可以添加如下规则:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond $1 !^(index\.php|images|robots\.txt|favicon.ico)
# Other rules here

这个想法是为了避免现有文件或目录的重写情况。

【讨论】:

  • 好的,所以我添加了 RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{HTTP_HOST} !^\.localhost$ [NC] RewriteRule ^(.+)/$ http://%{HTTP_HOST}/$1 [R=301,L] 这意味着斜杠不再是问题。但我没有明白你在这里想要做什么?
【解决方案3】:

带有尾部斜杠的路径将被解释为目录。无论您在哪里包含图像、css 文件等,您都必须更改路径。假设您在 img 文件夹中有图像,您可能会在 css 中使用它,例如:

background: url(img/image.png)...

将其更改为:

background: url(/img/image.png) ...

在您引用图像或其他路径的任何地方都是如此。使用以“/”开头的路径意味着您从根目录开始搜索。您使用的规则是我通常使用的规则,并且没有任何问题。实际上,我发现以“/”开头的路径更容易构建。

作为最后一个示例,如果您有:mysite.com/home 并且您有 <img src="img/image.png" />,则将在 mysite.com/img/image.png 这可能是你想要的。

但是,如果您有 mysite.com/home/<img src="img/image.png" />,则图像必须位于 mysite.com/home/img/image.png 中,这不是你想要什么,因此使用<img src="/img/image.png" /> 将是你的解决方案。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-28
    • 2015-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多