我有像这样的网址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
,则不会重写网址,它会像往常一样工作。
答案 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}}并在此基础上构建您的网站
这些框架提供了一个基础,一个基础,可以为您提供无限可能性。