删除apache mod_rewrite中的目录

时间:2013-07-08 15:30:11

标签: apache mod-rewrite url-rewriting rewrite

我有一个替换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]

2 个答案:

答案 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。

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