【问题标题】:Mod_rewrite rewriting things it's explicitly told not toMod_rewrite 重写被明确告知不要的东西
【发布时间】:2010-11-09 06:14:06
【问题描述】:

我的 .htaccess 中有以下重写:

Options +FollowSymLinks 
RewriteEngine On
RewriteRule \.(css|jpe?g|gif|png)$ - [L]
RewriteRule ^index/error/([^/\.]+)/?$ index.php?error=$1 [L]

如您所知,它不应该重写任何 .css/.jpg/.jpeg/.gif/.png 文件。尽管如此,它还是这样做了。真正奇怪的是,它下面的那一行,将 /index/error/whatever 重定向到 index.php?error=$1 的那一行运行良好。我的正则表达式有问题吗?有没有更好的方法来做到这一点?

TIA。

经过多次尝试稍后解决问题后进行编辑:

我实际上找到了一种不同的(在我看来)更优雅、当然更简单的方法来做到这一点。我的问题是我的文件包含指向我的 CSS 文件的指针,即 href="./css/styles.css"。 styles.css 文件永远不会移动。因此,我只是将 href 元素更改为绝对 URI (http://www.mysite.com/css/styles.css) 而不是相对 URI。问题解决了!感谢所有发帖提供帮助的人。

【问题讨论】:

  • 看起来不错。你能从你的 Apache 日志文件中发布一些条目来准确显示正在发生的事情吗?
  • 哪个重写规则被应用到 css,jpg... 文件?

标签: regex apache mod-rewrite


【解决方案1】:

您可以使用 RewriteCond 来避免将规则应用于该组扩展,例如

Options +FollowSymLinks 
RewriteEngine On
RewriteCond %{REQUEST_URI} !\.(css|jpe?g|gif|png)$
RewriteRule ^index/error/([^/\.]+)/?$ index.php?error=$1 [L]

此外,您没有提及哪些请求失败以及以何种方式失败,如果这不足以解决您的问题(很可能),这将是很高兴的。

【讨论】:

  • +1 因为我第一次玩 URL 重写时遇到了这个问题(不使用 RewriteCond)。
  • 不幸的是,不,你是对的,这似乎并没有解决它。我遇到的具体问题是,在请求我的 CSS 和图像文件时,Safari(以及 Firefox 和不锈钢)正在 /index/error/-1/ (例如)作为目录查找,而不是遵循重写规则留在根目录中。这足以解释它吗?
【解决方案2】:

当 url 被修改时,'last' 规则在 .htaccess 中不是很有用 - 请参阅mod_rewrite tech。在那里,您会看到这是因为重写发生在请求处理的后期,因此它知道目录,但是重写 url 为时已晚。它通过创建一个新请求来解决这个问题,并且该新请求由相同的规则再次处理,有效地否定了“last”标志。

我看不出这如何适用于您的情况。 '-' 不应该是 url 重写。从this web site,他们建议使用下面的命令来调试重写,你应该明白为什么你的规则似乎被忽略了。

    You can debug mod_rewriting adding those two directives in httpd.conf:
    RewriteLogLevel 9
    RewriteLog "<path-to-log-file"

正则表达式对我来说看起来不错,我在 a mod_rewrite example 中看到了几乎相同的。

【讨论】:

    【解决方案3】:

    我实际上找到了一种不同的(在我看来)更优雅、当然更简单的方法来做到这一点。我的问题是我的文件包含指向我的 CSS 文件的指针,即 href="./css/styles.css"。 styles.css 文件永远不会移动。因此,我只是将 href 元素更改为绝对 URI (http://www.mysite.com/css/styles.css) 而不是相对 URI。问题解决了!感谢所有发帖提供帮助的人。

    【讨论】:

    • 这让我想知道“-”是否真的看起来像重写,因为它从相对 uri 变为绝对 uri,即使没有替换。
    • 我也是。我希望我知道的足够多,可以更好地排除故障!
    猜你喜欢
    • 1970-01-01
    • 2014-12-08
    • 2014-08-25
    • 1970-01-01
    • 2019-08-06
    • 1970-01-01
    • 2015-10-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多