0

其他 RewriteRules 工作,所以我已经替换了这些,并将这个放在第一位。故意修改它会返回 500 错误,所以我确信我的语法是错误的,而不是我的配置。

我重新设计了一个曾经有如下 URL 的网站:

/product_view.asp?product_id=123&images_id=456

我的新网站的网址如下:

/shop/product/123

(这两个123s 与我保持相同的数据库相同)

我的重写规则是:

RewriteRule ^product_view.asp\?product_id=([0-9]+).*$ /shop/product/$1 [R=301,L]

但什么也没有发生——没有错误,没有 500 秒,什么也没有。

我做错了什么?

4

1 回答 1

2

RewriteRule仅指路径,不包括QUERY_STRING. product_id从查找。QUERY_STRING_RewriteCond

RewriteCond %{QUERY_STRING} (?:^|&)product_id=([0-9]+)
RewriteRule ^product_view\.asp$ /shop/product/%1? [R=301,L]

分组的部分RewriteCond可以称为%1。它可以用于RewriteRule.

如果放在替换部分?的末尾,将被丢弃。(如果您的 Apache 版本是 2.4 或更高版本,您可以使用flag 来代替。)它并不总是需要,但也许您不喜欢像.RewriteRuleQUERY_STRINGQSD/shop/product/123?product_id=123&images_id=456

查看mod_rewrite 文档了解详细信息。

于 2012-12-14T16:41:13.827 回答