相当基本的mod重写问题

时间:2012-02-01 15:22:39

标签: mod-rewrite

我的网站通过index.php脚本过滤所有内容,在阅读mod_rewrite的文档时,看起来很简单,但我有点卡住了。我想我会一次开始一个页面,看看我是否可以让它工作,并且很快就卡住了。

我有用户个人资料,其基本形式基本上是:

http://www.mysite.com/index.php?content=profile&id=2172

所以我在我的.htaccess文件中添加了一个Rewrite规则,该文件位于根文件夹中:

RewriteRule ^profile/([0-9]+)$ index.php?content=profile&id=$1

现在的想法是能够输入mysite.com/profile/2172

重定向会显示正确的页面,但正在发生的是每个CSS文件,图像等都在中间获取/配置文件/添加,这当然不是图像和CSS文件所在的位置。我在代码中使用相对路径名,因此代码中的图像示例可能是:images/userimage.jpg

发生的事情是上面显示的相对链接变成了:

mysite.com/profile/images/username.jpg

对我来说没有意义,因为图像路径与重写模式(/profile/*)不匹配,那么为什么虚假路径会将/profile/添加到我的所有内部链接中?

我尝试在重写之前将RewriteCond %{SCRIPT_FILENAME} !-f添加到htaccess,只是为了看看发生了什么,没有变化。

很抱歉,如果这是一个简单而基本的问题,但任何具有真正的mod重写专业知识的人都可以给我一些指示,以便我可以使这个简单的案例工作,并将我的代码中的正确引用的页面调到我包含的css和图像文件?我没有对Rewriterule使用任何标志,因为在引擎打开后我只有那一行(并且followymlink行也在那里)。

1 个答案:

答案 0 :(得分:0)

  

对我来说没有意义,因为图像路径与重写模式(/ profile / *)不匹配,那么为什么伪造路径会将/ profile /添加到我的所有内部链接?

您的图片与所投放的网页有关,该网页的格式为/profile/,例如mysite.com/profile/2172。您可能需要考虑将图像/ css链接从根目录改为绝对,即/images/imag.jpg

如果不可能,您可以使用其他重写来纠正问题(仅针对此情况,一般不建议),如下所示。

RewriteEngine on
RewriteBase /

#rewrite to remove profile for jpg, css etc, must go above existing rule below
RewriteRule ^profile/(.+\.(jpg|css|js|png))$ $1 [L,NC]

#existing rule
RewriteRule ^profile/([0-9]+)$ index.php?content=profile&id=$1 [L,NC]