我有一个旧网站,我想升级它并让它使用.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="" />
但这需要时间,因为我说是有任何方法来解决任何解决方案的问题。
抱歉英语不好
答案 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之外没有其他方法。