【问题标题】:Mod_rewrite works but path is changedMod_rewrite 有效,但路径已更改
【发布时间】:2012-09-25 15:49:53
【问题描述】:

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

所以我有一个 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 不会被重写,它会像往常一样工作。

【问题讨论】:

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


    【解决方案1】:

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

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

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

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

    /product/shirt-12
    

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

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

    <base href="/">
    

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

    当然它不是重写的,你没有它的规则。重写规则是这样工作的:

    RewriteRule <match> <target> <flags>
    

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

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

    【讨论】:

    • 我不明白,使用 RewriteRule /products/shirt-12 /index.php?section=products&id=12 我不会重定向来自 /index.php?section=products&id=12 的所有流量到/products/shirt-12?如果没有,我需要怎么写?
    • @DavidTG 它与这个问题没有任何关系,有关解释,请参见此答案的顶部:stackoverflow.com/a/11711948/851273
    【解决方案2】:

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

    这些框架提供了一个基础,一个基础,可以在此基础上进行构建,并为您提供无限的可能性。

    【讨论】:

      猜你喜欢
      • 2015-09-17
      • 1970-01-01
      • 2014-09-20
      • 1970-01-01
      • 2013-04-24
      • 2015-12-07
      • 2019-06-17
      • 2011-05-30
      • 2011-05-02
      相关资源
      最近更新 更多