为什么我的htaccess RewriteRule不适用于我的查询字符串?

时间:2016-09-28 16:54:46

标签: apache redirect mod-rewrite

我正在将一个ASPX站点移动到Wordpres - 从IIS服务器移动到Apache - 我在查找带有查询字符串的页面时遇到了问题。我查看了Apache文档,并尝试使用mod_rewrite,但到目前为止还没有运气。

例如,我想重定向这些页面:

  

www.mysite / Product / Product.aspx?mapid = 324 $ to   www.mysite /蓝色的小部件/ widget7 /   www.mysite / Product / Product.aspx?mapid = 681 $ to   www.mysite /蓝色的小部件/ widget12 /   www.mysite / Product / Product.aspx?mapid = 841 $ to   www.mysite /蓝色的小部件/ widget82 /

这是我在的地方。我已经尝试了几次迭代,但无法使其工作。我开始认为它可能与服务器和Wordpress生成的前几条规则有关。该站点是一个插件域,服务器将其视为子域。

我的重写是最后三个。任何想法为什么这些不起作用?谢谢你的帮助。

<IfModule mod_rewrite.c>

    RewriteEngine On
    RewriteBase /~username/
    RewriteRule ^index\.php$ - [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /~username/mysite/index.php [L]

    RewriteCond %{QUERY_STRING} ^mapid=324$ [NC]
    RewriteRule ^/Product/Product\.aspx(.*)$ ^https://www.mysite/blue-widgets/widget7/? [L,R=302,NC]

    RewriteCond %{QUERY_STRING} ^mapid=681$ [NC]
    RewriteRule ^/Product/Product\.aspx(.*)$ ^https://www.mysite/blue-widgets/widget12/? [L,R=302,NC]

    RewriteCond %{QUERY_STRING} ^mapid=841$ [NC]
    RewriteRule ^/Product/Product\.aspx(.*)$ ^https://www.mysite/blue-widgets/widget82/? [L,R=302,NC]

</IfModule>

1 个答案:

答案 0 :(得分:1)

我相信以下内容可行:

RewriteEngine On
RewriteCond %{QUERY_STRING} ^mapid=324$ [NC]
RewriteRule /Product/Product\.aspx https://www.example.com/blue-widgets/widget7/? [L,R=302,NC]

RewriteCond %{QUERY_STRING} ^mapid=681$ [NC]
RewriteRule /Product/Product\.aspx https://www.example/blue-widgets/widget12/? [L,R=302,NC]

RewriteCond %{QUERY_STRING} ^mapid=841$ [NC]
RewriteRule /Product/Product\.aspx https://www.example/blue-widgets/widget82/? [L,R=302,NC]

RewriteBase /~username/
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /~username/mysite/index.php [L]

为了更好地解释其他人,规则的顺序很重要。由于Wordpress规则更改了RewriteBase并更改了URL,因此如果它们位于底部,则永远不会触及.aspx页面的规则。