noob的mod重写和相对url的问题

时间:2010-02-25 15:28:00

标签: url mod-rewrite seo

我必须做一些非常错误的事情,因为无论我如何尝试或谷歌它,我都找不到答案:(

所以,我想要一个像http://localhost/BLUEPRINT/list/857这样的网址 实际加载一个完美的工作网址:http://localhost/BLUEPRINT/list.php?lid=857

我可以在.htaccess文件中写入重写规则,我可以读取lid变量。问题是list.php中的所有路径都是相对的。 Css,图片,javascript e.t.c.因此,当SEO友好的网址加载所有这些项目都在内部查看BLUEPRINT / list / 857 /...

例如:<img src="images/logo.png" />在请求seo友好网址时实际上是这样的:<img src="list/857/images/logo.png" />

那我该怎么办?

我可能会尝试将页面中的所有路径转换为root相对(例如“/ BLUEPRINT/images/logo.png”)而不是相对路径。但是页面中有几十个,即使我这样做,它们也无法在实际服务器上运行,因为它可能是“/ images”而不是“/ BLUEPRINT / images”。所以我不能只将文件上传到实际的服务器。

我有什么选择?所有这些精彩的剧本如何像wordpress,joomla,e.t.c。处理这个问题?我到底做错了什么?它让我发疯了!

3 个答案:

答案 0 :(得分:3)

您的新网址没有相同的基本路径前缀。这意味着相对URL路径的解析方式不同。引用images/logo.png现已解析为/BLUEPRINT/list/images/logo.png而不是/BLUEPRINT/images/logo.png

要解决此问题,请在参考文献中使用绝对网址路径,例如:

<img src="/BLUEPRINT/images/logo.png" />

或者,如果您不想将基本网址路径/BLUEPRINT/添加到所有引用元素,请使用base设置基本网址:

<base href="/BLUEPRINT/" />

现在,从此基本URL而不是当前URL解析相对URL路径。但请注意,更改基本网址会影响所有相对网址。

答案 1 :(得分:1)

您可以编写一个条件,允许对CSS,JS和其他路径的请求通过,并忽略list.php的重写规则。这是一个例子。

# Turn on URL rewriting
RewriteEngine On

# If your URL is www.example.com/, use /
RewriteBase /

# Find CSS and JS paths
RewriteCond $1 ^(BLUEPRINT/css|BLUEPRINT/js)

# No rewriting
RewriteRule ^(.*)$ - [PT,L]

以下是Apache的一个很棒的教程,其中包含大量示例:http://httpd.apache.org/docs/2.2/misc/rewriteguide.html

祝你好运!

编辑:来自Apache的另一个好的链接是mod_rewrite docs。 http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html搜索“passthrough”文本。

要注意的RewriteRule的另一部分是破折号' - '。这意味着“不应该进行替换”。

最后,我在示例中添加了RewriteEngine和RewriteBase规则。这应该使它更完整。

答案 2 :(得分:0)

您是否尝试过应用“RewriteBase”-Rule?

http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html#rewritebase