【问题标题】:RewriteRule for long url with parameters / How do I beautify them?带有参数的长 url 的 RewriteRule / 如何美化它们?
【发布时间】:2011-08-05 18:43:30
【问题描述】:

在过去的几周里,我已经阅读了有关 RewriteRules 的所有内容。 你是我最后的选择:D

我什么都做不了(是的,重写引擎已打开,简单的东西也可以工作)。

我的网站网址如下所示:

http://www.videospielkalender.de/?platform=wii&setfilter=1&dates=2

我想要这样的结果

http://www.videospielkalender.de/wii/price/nextweek/

就是这样。 我希望这里的一些天才可以帮助我朝着正确的方向前进。

谢谢大家 奥利弗

【问题讨论】:

  • 为什么会太长?唯一事实上的长度限制是 2000 字节左右。
  • 其实我的意思不是太长。我希望他们更漂亮。
  • code RewriteEngine On RewriteRule ^/?test\.html$ test.php RewriteRule ^([^/]+)/([^/]+)/( [^/]+)/$ /?platform=$1&setfilter=$2&dates=$3

标签: apache mod-rewrite url-rewriting apache2


【解决方案1】:

http://wiki.apache.org/httpd/RewriteQueryString 的最后一个食谱是开始的地方。在您上面提到的特定情况下,您需要执行以下操作:

RewriteRule ^/?([^\]+)/([^\]+)/([^\]+)/? /?platform=$1&setfilter=$2&dates=$3

然而,这个解决方案有两个相当明显的问题。它们是:

  1. 我们如何将“价格”映射到“1”,将“下周”映射到“2”?也许这是您的处理程序/脚本/任何需要变得足够聪明才能做到的事情

  2. 您网站上的其他 URI(图像、css、js 等)也可能被此规则集捕获,这可能会破坏某些内容。

这两种情况都可以通过以下方式解决:

  1. 使脚本足够智能以处理参数 和
  2. 根本不要使用 mod_rewrite。相反,请使用:

FallbackResource /index.php

(或任何你的根处理程序/脚本被调用)并让该脚本/处理程序智能地直接操作 PATH_INFO。

请记住,关于 mod_rewrite 最重要的是知道何时避免它。

【讨论】:

  • 重写规则 ^/?([^]+)/([^]+)/([^]+)/? /\?platform=$1&setfilter=$2&dates=$3 这会破坏我的网站:D(错误 500)
  • 也许你是对的,我应该修改脚本,让它变得更智能。 :D
【解决方案2】:

您可以使用此通用规则将后一个 URL 路径重写为前一个:

RewriteRule ^/([^/]+)/([^/]+)/([^/]+)/$ /?platform=$1&setfilter=$2&dates=$3

【讨论】:

  • 当我输入这个时没有任何反应。我认为我的脚本必须变得更聪明。
  • @Oliver Ruehl:如果您想在 .htaccess 文件中使用此规则,请从模式中删除前导 /
  • 什么也没发生 :( RewriteRule ^/([^/]+)/([^/]+)/([^/]+)/$ ?platform=$1&setfilter=$2&dates=$3
  • @Oliver Ruehl:您需要从 pattern 而不是从 substitution 中删除前导 /RewriteRule ^([^/]+)/([^/]+)/([^/]+)/$ /?platform=$1&setfilter=$2&dates=$3
  • 仍然没有成功。以下是完整代码:RewriteRule ^([^/]+)/([^/]+)/([^/]+)/$ /?platform=$1&setfilter=$2&dates=$3
猜你喜欢
  • 2017-03-22
  • 2012-04-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多