【问题标题】:How to rewrite the images path according to the written rules of the url?如何根据url的写入规则重写图片路径?
【发布时间】:2022-01-19 13:23:33
【问题描述】:

我正在尝试使用参数重写应用程序的 url。
我在主文件main.php中有一个链接。

<a href="index?id=100&title=sub-url-here>Continue</a>

index.php文件中有一个图片标签,src指向ìmages/文件夹。

<img src="images/fileaname.png" />

这一切都很好。

写入网址后出现问题。
这就是我在.htaccess 文件中的内容

RewriteEngine O

RewriteRule ^index/([0-9]+)/([0-9a-zA-Z-_]+)/?$ index.php?id=$1&title=$2 [NC,L]

我现在在index.php 文件中:

<a href="index/100/sub-url-here/">Continue</a>

但是,main.php 文件中的图像路径现在指向

<img src="100/sub-url-here/images/fileaname.png" />

如何根据.htaccess中写的url改写图片路径?

【问题讨论】:

  • 你的系统镜像目录结构是什么?只是/图像?

标签: php html .htaccess url-rewriting


【解决方案1】:

问题是您使用的是图像的相对 URL。 浏览器 将这些相对于浏览器地址栏中的当前 URL 解析(除非您有一个 &lt;base&gt; 标记,否则)。因此,在浏览器中查看页面 URL /index/100/sub-url-here/ 时,相对 URL images/filename.png 自然会解析为 index/100/sub-url-here/images/filename.png,而不是您可能期望的 /images/filename.png

您需要使用相对于文档根目录的根目录相关 URL(以斜杠开头),或使用图像(和其他静态资源)的绝对 URL(带有方案+主机名) - 所以图像 URL 不是相对于正在显示的页面 URL。

例如:

 <!-- https://example.com/images/filename.png -->
 <img src="/images/filename.png">

另请参阅网站管理员堆栈上的以下问题,该问题更详细地介绍了在 URL 重写时使用相对 URL 路径:

【讨论】:

  • 当然他必须改变main.php 的行为来强制它,因为我知道main.php 正在生成那个硬编码的图像url,他想要一个.htaccess 解决方案。我怀疑这与浏览时的相对路径有关,因为他粘贴了完整的标签&lt;img src="100/sub-url-here/images/fileaname.png" /&gt;
  • “因为他粘贴了完整的标签”——当然,这令人困惑。但是,这也是浏览器在 URL 重写后将原始 URL (&lt;img src="images/fileaname.png" /&gt;) 解析为的内容(他们说这是问题所在)。他们真的是根据请求的 URL 动态生成图片链接吗? index/ 前缀也被省略了。
  • 是的,我们等待他的回应才知道。出于这个原因,我开始在他的问题中设置评论,询问图像文件夹,以防万一他计划在系统中创建它们,或者只是欺骗.htaccess/images 获取它们,尽管路径很少。也许他会在具有不同 url 路径的页面之间共享图像,如果 google 图像 seo 认为它们是重复的,这可能会很危险。
  • 这是真的@MrWhite,index/ 前缀也存在。
  • 感谢您的回答。我不需要编辑.htaccess 文件。我只是在寻找解决问题的方法。 root-relative URLs (starting with a slash) 不起作用。但是absolute URLs (with scheme+hostname) 这样的http://localhost/appname/index/images/fileaname.png 解决了这个问题。
猜你喜欢
  • 2012-11-27
  • 1970-01-01
  • 2015-08-26
  • 1970-01-01
  • 1970-01-01
  • 2015-08-17
  • 2020-09-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多