noob 的 mod 重写和相对 url 的问题
Posted
技术标签:
【中文标题】noob 的 mod 重写和相对 url 的问题【英文标题】:noob's problem with mod rewrite and relative urls 【发布时间】:2011-01-21 01:36:20 【问题描述】:我一定是做错了什么,因为无论我如何尝试或谷歌搜索,我都找不到答案:(
所以,我想要一个像http://localhost/BLUEPRINT/list/857 这样的网址 像这样实际加载一个完美工作的网址:http://localhost/BLUEPRINT/list.php?lid=857
我可以在 .htaccess 文件中编写重写规则,并且可以读取 lid 变量。问题是 list.php 中的所有路径都是相对的。 Css、图像、javascript 等因此,当 SEO 友好的 url 加载时,所有这些项目都会在 BLUEPRINT/list/857/...
例如:<img src="images/logo.png" />
在请求 seo 友好的 url 时实际上是这样的:<img src="list/857/images/logo.png" />
那我该怎么办?
我可能会尝试将页面中的所有路径转换为根相对路径(例如“/BLUEPRINT/images/logo.png”)而不是相对路径。但是页面中有几十个,即使我这样做,它们也不会在实际服务器上工作,因为它应该是“/images”而不是“/BLUEPRINT/images”。所以我不能只是将我的文件上传到实际的服务器。
我有哪些选择?所有这些精彩的脚本,如 wordpress、joomla 等,是如何做到的?处理这个问题?我到底做错了什么?它让我发疯!
【问题讨论】:
【参考方案1】:您的新网址没有相同的基本路径前缀。这意味着相对 URL 路径的解析方式不同。引用 images/logo.png
现在解析为 /BLUEPRINT/list/images/logo.png
而不是 /BLUEPRINT/images/logo.png
。
要解决此问题,请在引用中使用绝对 URL 路径,例如:
<img src="/BLUEPRINT/images/logo.png" />
或者,如果您不想将基本 URL 路径 /BLUEPRINT/
添加到所有引用元素,请将基本 URL 设置为 base
:
<base href="/BLUEPRINT/" />
现在相对 URL 路径是从此基本 URL 而非当前 URL 解析的。但请注意,更改基本 URL 会影响 所有 相对 URL。
【讨论】:
基本标签(不知道)对我来说似乎是一个很好的解决方案!我会尝试并让你知道。谢谢。 抱歉花了这么长时间尝试,但这正是我想要的!非常感谢!base
标签有问题。 blogs.msdn.com/b/ieinternals/archive/2009/07/27/…
@DaveJarvis 相反:IE8 与BASE
存在一些问题。
@Gumbo:理论上这个bug已经修复了;在实践中,公众有很多错误的浏览器。【参考方案2】:
您可以编写一个条件,允许对 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 文档。 http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html 对“passthrough”进行文本搜索。
要注意的 RewriteRule 的另一部分是破折号“-”。这意味着“不应执行替换”。
最后,我在示例中添加了 RewriteEngine 和 RewriteBase 规则。这应该使它更完整。
【讨论】:
【参考方案3】:您是否尝试过应用“RewriteBase”-Rule?
http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html#rewritebase
【讨论】:
我正在尝试RewriteBase /BLUEPRINT/
或RewriteBase /BLUEPRINT
似乎没有任何效果?
我知道我已经使用 RewriteBase 解决了类似的问题。我会尽力找出并回复你。以上是关于noob 的 mod 重写和相对 url 的问题的主要内容,如果未能解决你的问题,请参考以下文章