Mod_rewrite有效,但路径已更改

时间:2012-10-04 14:59:12

标签: .htaccess mod-rewrite friendly-url seo

我有像这样的网址index.php?section = products& id = 12我想要这样的网址/ products / shirt-12(衬衫是产品的名称)。

所以我有一个PHP脚本,当你添加产品时,会在.htaccess中添加一行。这是我的.htaccess,添加了1个产品:

RewriteEngine On
RewriteRule /products/shirt-12 /index.php?section=products&id=12

问题是,当我在浏览器中编写www.domain.com/product/shirt-12时,没有包含脚本/图像,我查看图像未加载的方块,它试图加载来自/products/images/img.jpg的图片来自/images/img.jpg。我该如何解决这个问题? 我试过DocumentRoot但是我得到500错误。我该怎么办?

编辑:如果我在浏览器中放置/index.php?section=products&id=12,则不会重写网址,它会像往常一样工作。

2 个答案:

答案 0 :(得分:0)

  

当我在浏览器中编写www.domain.com/product/shirt-12时,没有包含脚本/图像

这是因为相对URI基数已更改。如果您有相对的图片/ css /脚本链接(即它们不是以http:///开头),则浏览器必须附加基础它的前面是为了请求资源。浏览器何时进入:

/index.php?section=products&id=12

基础URI是/,因此它看到的任何相对链接,只会将/附加到它们的开头。但是当浏览器看到:

/product/shirt-12

基本URI为/product/,因此它看到的任何相对链接都会将/product/追加到开头,并且所有相关链接都会被破坏。

您可以通过在URI前添加/来更改绝对链接的所有相对链接来解决此问题。或者将其添加到页面的标题中:

<base href="/">
  

如果我在浏览器中放置/index.php?section=products&id=12,则不会重写网址,它会像往常一样工作。

当然它没有被重写,你没有规则。重写规则的工作方式如下:

RewriteRule <match> <target> <flags>

无论传入的URI是什么,如果它与正则表达式<match>匹配,它都会被重写为<target>。而已。没有<target>回到模糊的正则表达式(世界上甚至如何工作?)。它并没有神奇地改变浏览器URL地址栏中显示的内容。它只需要与正则表达式匹配的内容,服务器内部的 将其重写为<target>

如果您想更改浏览器中的内容,那与您的图片路径完全不同。

答案 1 :(得分:0)

我的建议是,不要浪费时间学习和创建mod_rewrite规则,并尝试为您的网站提供完美的每个网址,为什么不采用超级简单,超轻量级的框架,如Codeigniter http://codeigniter.com或Kohana {{ 3}}并在此基础上构建您的网站

这些框架提供了一个基础,一个基础,可以为您提供无限可能性。