【问题标题】:mod_rewrite page beautifyingmod_rewrite 页面美化
【发布时间】:2010-05-19 00:31:07
【问题描述】:

所以我被困住了。一般来说,我不太擅长 mod_rewrite 或正则表达式,这给我带来了问题。

我需要重定向 url 之类的
domain.com/view/Some_Article_Name.html

domain.com/index.php?p=view&id=Some_Article_Name

我现在的规则运行良好,但它也重写了我所有的样式表和图像以及不应该重写的东西。
RewriteRule ^view/([^/]*)\.html$ /index.php?p=view&id=$1 [L]

它应该只重定向以domain.com/view/*开头的页面。我想我所需要的只是一个重写条件,但我似乎无法制作一个有效的。知道我需要在其中添加什么以使其工作而无需为每个单独的文件编写重写器吗?

RewriteCond %{REQUEST_FILENAME} ^(.*)\.html [NC]
RewriteRule ^view/([^/]*)\.html$ /index.php?p=view&id=$1 [L]

是我对此的重写声明。

【问题讨论】:

  • 我看不出RewriteRule 怎么可能匹配不以view/ 开头的东西...你是说它的作用是什么?
  • 是的,就是这样。它正在寻找 view/style.css 而不是 style.css。此问题现已修复。现在的问题是仅对 /view/* 强制执行它的重写条件。我似乎无法弄清楚如何在这个古老的系统中格式化 cmets,所以我将它添加到我的原始帖子中。

标签: regex mod-rewrite


【解决方案1】:

我怀疑您的样式表和图像是否受到此规则的影响。因为这意味着您的样式表和图像的 URL 路径以 .html 结尾。因为否则将不会应用该规则。

我宁愿假设您使用相对 URL 路径来引用样式表和图像,例如 ./css/style.cssimages/foo/bar.png。此类相对 URL 路径是从基本 URL 路径解析的。也就是当前文档的 URL 路径。

您的原始 URL 路径只有一个路径段,并且从该点开始时所有相对 URL 路径都有效。但是现在您引入了另一个路径段 (/view),并且从该路径解析了相对路径。所以./css/style.cssimages/foo/bar.png 现在解析为/view/css/style.css/view/images/foo/bar.png,而不是/css/style.css/images/foo/bar.png,就像/index.php 一样。

解决方案:使用/css/style.css/images/foo/bar.png 等绝对URL 路径来引用您的外部资源。有了这样的 URL 路径,基本 URL 可以有任何路径,并且资源总是得到正确解析。

【讨论】:

    【解决方案2】:

    您是说您希望 css 和图像位于原始文件位置下(例如在 htdocs/view/ 上,htdocs 是您的源根目录,但您希望将 html 的 url 重新路由到 index.html 。 php 文件?

    如果这就是您所说的,那么您需要的是反向 RewriteRule,因为浏览器将选择与重定向 url 相关的任何 css/图像(假设 html 中的相对图像/css 引用)。

    除此之外,我同意 @David 的观点,并且无法匹配 view.html 的任何内容。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-08-13
      • 2010-10-30
      • 2016-02-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-19
      相关资源
      最近更新 更多