我必须做一些非常错误的事情,因为无论我如何尝试或谷歌它,我都找不到答案:(
所以,我想要一个像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。处理这个问题?我到底做错了什么?它让我发疯了!
答案 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