【问题标题】:mod_rewrite involving query stringmod_rewrite 涉及查询字符串
【发布时间】:2009-12-03 02:54:53
【问题描述】:

我正在努力解决涉及 .css 文件的 mod_rewrite 问题,这些文件由引用图像的“程序”动态提供。我说“程序”是因为技术栈有点晦涩,但只要在其中插入你最喜欢的技术 [perl | php |爪哇]。

使用以下 URL 从页面引用 CSS 文件:

http://server/dir/subdir/file-program?site-id=1234&fname=stylesheet.css

CSS 的内容包括如下图片引用:

background-image:url('hello.png'); 
... 
background-image:url('world.png');

浏览器将这些引用解释为 /dir/subdir/*.png。

我想要做的是使用引用者的 URL 重写所有这些请求,因此它们最终看起来像:

http://server/dir/subdir/file-program?site-id=1234&fname=hello.png
http://server/dir/subdir/file-program?site-id=1234&fname=world.png

请注意,站点 ID 是可变的,因此我确实需要引用引荐来源网址来获取整个查询字符串。抱歉,我在原帖中忽略了这一点。

换一种说法:任何来自 ...file-program...*.css 的图像引用都应该被重写以使用该 CSS 的 URL(包括查询字符串),只需将图像文件名替换为 css 文件名字。

任何帮助将不胜感激。

【问题讨论】:

  • 你不能只修复文件程序来生成这样的 URL 吗?
  • Dominic,我希望事情就这么简单。不幸的是,“文件程序”不是开源的或我控制的东西。它可能会在产品的未来版本中发生变化,但目前我认为 mod_rewrite 是解决它的最快方法。

标签: mod-rewrite


【解决方案1】:

我无法做出任何承诺,但请试一试:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-s [OR]
RewriteCond %{REQUEST_FILENAME} !-l [OR]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^/dir/subdir/(*.)$ /dir/subdir/file-program?fname=$1&referer=%{HTTP_REFERER}
RewriteRule ^/dir/subdir/file-program?fname=(.*?)&referer=(*.)siteid=([0-9]+) /dir/subdir/file-program?fname=$1&siteid=$3

【讨论】:

  • Jordon,看起来我遗漏了一个关键细节,那就是 site-id 是可变的,所以我想引用引用者(.css 文件)来获取查询字符串。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-07-27
  • 1970-01-01
  • 2011-03-11
  • 1970-01-01
  • 2012-02-05
  • 2018-05-11
  • 2016-03-26
相关资源
最近更新 更多