1

我有一个替换 ASP 站点的 PHP 站点,因此路径结构不同。

在 URL 中,我需要匹配http://apache.site/Cartv3/Details.asp并重定向到另一个位置。匹配该 URL 片段的正确语法是什么?

我已经试过了

RewriteCond %{REQUEST_URI} CartV3/results1.asp?Category=60
RewriteRule ^(.*)$ home-study/A-Levels/1/page-1 [R=301,L]

RewriteRule ^CartV3/Details\.asp?ProductID=1004 home-study/A-Levels/1/page-1 [R=301,L]
4

2 回答 2

1

您需要阅读有关 mod_rewrite 的更多信息。记住 RewriteRule 不匹配查询字符串。您的尝试需要重写为:

Options +FollowSymLinks -MultiViews
# Turn mod_rewrite on
RewriteEngine On
RewriteBase /

RewriteCond %{QUERY_STRING} ^Category=60$ [NC]
RewriteRule ^CartV3/results1\.asp$ /home-study/A-Levels/1/page-1? [R=302,L,NC]

确认它工作正常后,替换R=302R=301. R=301在测试你的 mod_rewrite 规则时避免使用(永久重定向)。

PS:?afterpage-1是一种特殊的 mod_rewrite 语法,用于去除原始查询字符串。如果您想在重写的 URL 中保留原始查询字符串,那么最后取出?

于 2013-07-08T16:14:33.707 回答
0

这里的问题是您正在尝试匹配查询字符串,这必须由单独的RewriteCond. 如果您想要匹配“Category=60”,那么您可以将其添加为条件:

RewriteCond %{QUERY_STRING} Category=60
RewriteCond %{REQUEST_URI} /CartV3/results1.asp
RewriteRule .* home-study/A-Levels/1/page-1?

这将匹配http://example.com/CartV3/results1.asp?Category=60并重定向。?规则末尾的 "?Category=60" 停止指向生成的 URI 。

如果您不关心查询字符串中的值,则可以删除第一个条件。

于 2013-07-08T16:14:00.367 回答