重写规则包括斜杠无效的路径

时间:2011-10-14 17:24:59

标签: html .htaccess mod-rewrite

我有一个旧网站,我想升级它并让它使用.htaccess重写搜索引擎的规则,例如,假设我在.htaccess文件中有这个规则

RewriteRule ^category/electric category.php?type=8

这将没有任何问题,但是当页面加载时不会出现任何图像而且没有应用css,在我在互联网上进行了一些搜索后,我发现这个问题是因为URL是这样的:

http://www.mywebsite.com/category/electric 

我找到了解决方案但是需要花费大量时间来应用它,我发现如果我在每个需要JS,CSS,图像,......等文件的元素中放入完整的url事情会好像这样

<img src="images/image.png" width="100" height="100" alt="" />

<img src="http://www.mywebsite.com/images/image.png" width="100" height="100" alt="" />

但这需要时间,因为我说是有任何方法来解决任何解决方案的问题。

抱歉英语不好

3 个答案:

答案 0 :(得分:1)

您可以使用完整的网址路径来覆盖图片,如下所示:

<img src="/images/image.png" width="100" height="100" alt="" />

请注意/前面的images:它使路径相对于文档根目录而不是当前目录。

另一种选择是在您的网页<head>中添加<base> tag,如下所示:

<base href="http://www.mywebsite.com/" />

这会使页面上的所有相对网址都像http://www.mywebsite.com/一样。

不幸的是,这两种解决方案都需要编辑HTML。 HTTP / 1.1确实定义了Content-Location header假设与HTML中的<base>标记一样,但浏览器对它的支持似乎有限。 (例如,Mozilla似乎有decided not to support it,因为它会破坏太多现有网站。)显然,某些版本的HTTP规范也有一个Content-Base标头,但它的支持也很差,后来removed from the standard

当然,另一个选择是 make images/image.png,即使前缀为category/也是如此。以下重写规则应该这样做:

RewriteRule ^category/images/(.*) images/$1  [L,R=permanent]

(内部重定向也应该有效,但可能会导致浏览器请求图像两次,因为它们没有意识到它们是相同的。如果图像非常小,它可能仍然会更有效。)

答案 1 :(得分:0)

您可以尝试重写规则,例如:

RewriteRule ^.*category/electric category.php?type=8

注意开头的额外“。*”;这是一个通配符匹配,这意味着它应该允许任何URL,只要它以类别/电子结束......

答案 2 :(得分:0)

RewriteRule ^.+(/images/.*)$ $1 [R=301]

将example.com/category/images/example.jpg重定向到example.com/images/example.jpg

不理想,因为它需要为每个图像提供额外的http请求,但除了更改html之外没有其他方法。