我有一个替换ASP站点的PHP站点,因此路径结构不同。
在网址中,我需要匹配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]
答案 0 :(得分: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=302
替换为R=301
。在测试mod_rewrite规则时,请避免使用R=301
(永久重定向)。
PS:?
之后page-1
是一种特殊的mod_rewrite语法,用于去除原始查询字符串。如果您想将原始查询字符串保留在重写的URL中,请最后取出?
。
答案 1 :(得分: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。
如果您不关心查询字符串中的值,则可以删除第一个条件。