1

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

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

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

问题是,当我在浏览器中编写 www.domain.com/product/shirt-12 时,没有包含脚本/图像,我查看了一个 image-not-loaded-square,它试图从 / 加载图像products/images/img.jpg 安装在 /images/img.jpg 中。我该如何解决这个问题?我尝试了 DocumentRoot,但出现 500 错误。我该怎么办?

编辑:如果我把/index.php?section=products&id=12浏览器放进去,url 不会被重写,它会像往常一样工作。

4

2 回答 2

0

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

这是因为相对 URI 基础已更改。当您有相对的图像/css/脚本的链接(即它们不以http://or开头/)时,浏览器必须在其前面附加一个基础才能请求资源。当浏览器转到:

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

基本 URI 是/,所以它看到的任何相对链接,它都会简单地附加/到它们的开头。但是当浏览器看到:

/product/shirt-12

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

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

<base href="/">

另外,如果我/index.php?section=products&id=12在浏览器中输入 url,则不会重写它,它会像往常一样工作。

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

RewriteRule <match> <target> <flags>

无论传入的 URI 是什么,如果它与正则表达式匹配,<match>它就会被重写为<target>. 就是这样。没有<target>回到模棱两可的正则表达式(这到底是怎么工作的??)。它不会神奇地改变浏览器 URL 地址栏中显示的内容。它只需要与正则表达式匹配的内容,并在服务器内部将其重写为<target>.

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

于 2012-10-04T19:00:11.813 回答
0

我的建议是不要浪费时间学习和创建 mod_rewrite 规则并尝试为您的网站完善每个 url 为什么不采用像 Codeigniter http://codeigniter.com或 Kohana http:/这样的超级简单、超级轻量级​​的框架/kohanaframework.org并在此基础上构建您的网站

这些框架提供了一个基础,一个可以构建的基础,并让您拥有无限的可能性。

于 2012-10-05T10:33:50.313 回答