.htaccess重定向条件在Apache 2.2上不起作用

.htaccess重定向条件在Apache 2.2上不起作用,apache,.htaccess,redirect,Apache,.htaccess,Redirect,我有以下格式的一些URL: www.website.co.uk/form.aspx?type=brochure www.website.co.uk/form.aspx?type=contact www.website.co.uk/form.aspx?type=quote 我需要根据“type”参数将每个页面重定向到不同的页面 我对重写的理解是,您将使用一个重写条件来获取这个参数,然后是一个重定向规则,例如 RewriteCond %{QUERY_STRING} ^type=contact [N

我有以下格式的一些URL:

www.website.co.uk/form.aspx?type=brochure
www.website.co.uk/form.aspx?type=contact
www.website.co.uk/form.aspx?type=quote
我需要根据“type”参数将每个页面重定向到不同的页面

我对重写的理解是,您将使用一个重写条件来获取这个参数,然后是一个重定向规则,例如

RewriteCond %{QUERY_STRING} ^type=contact [NC]
Redirect 301 /form.aspx /customer-support/contact-us?

RewriteCond %{QUERY_STRING} ^type=quote [NC]
Redirect 301 /form.aspx /ask-an-expert?
这在我使用的重定向测试仪()上有效,但在实际站点上无效

我认为这可能与我正在运行的Apache版本(2.2)有关——这是Magento 2的要求,无法升级


这可能吗?非常感谢您提供的任何提示。

我认为您混淆了Apache软件包,
RewriteCond
mod\u rewrite
的一部分,而
Redirect
mod\u alias
-您应该将
RewriteCond
RewriteRule
一起使用,就像这样:

RewriteEngine On

RewriteCond %{REQUEST_URI} ^/form.aspx [NC]
RewriteCond %{QUERY_STRING} ^type=contact [NC]
RewriteRule .* /customer-support/contact-us? [R=301,L]

RewriteCond %{REQUEST_URI} ^/form.aspx [NC]
RewriteCond %{QUERY_STRING} ^type=quote [NC]
RewriteRule .* /ask-an-expert? [R=301,L]



但是由于这是Magento 2,如果要将这些规则添加到根
.htaccess
文件中,则必须在Magento的核心路由器(vanilla.htaccess中的第172行)之前添加这些规则:

############################################
## add your custom rewrites before line 172
## which is the start of Magento's core router

    RewriteCond %{REQUEST_URI} ^/form.aspx [NC]
    RewriteCond %{QUERY_STRING} ^type=contact [NC]
    RewriteRule .* /customer-support/contact-us? [R,L]

    RewriteCond %{REQUEST_URI} ^/form.aspx [NC]
    RewriteCond %{QUERY_STRING} ^type=quote [NC]
    RewriteRule .* /ask-an-expert? [R,L]

############################################ < this would have been line 172
## never rewrite for existing files, directories and links

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-l
############################################
##在第172行之前添加自定义重写
##这是Magento核心路由器的起点
RewriteCond%{REQUEST_URI}^/form.aspx[NC]
RewriteCond%{QUERY\u STRING}^type=联系人[NC]
是否重写规则/客户支持/联系我们?[R,L]
RewriteCond%{REQUEST_URI}^/form.aspx[NC]
RewriteCond%{QUERY_STRING}^type=quote[NC]
重写规则/询问专家?[R,L]
############################################<这应该是第172行
##决不重写现有文件、目录和链接
重写cond%{REQUEST_FILENAME}-F
重写cond%{REQUEST_FILENAME}-D
重写cond%{REQUEST_FILENAME}-L

(这适用于我的本地Magento 2 dev安装)

在vhost中,您是否允许您的
.htaccess
文件设置
mod_rewrite
设置?您应该在vhost的
部分中有
AllowOverride FileInfo
AllowOverride All
。您不希望
重定向301
,但需要
重写规则
在那里:
重定向301谢谢你回复我-这非常有帮助。问题是,我们不支持“QSD”标志,这在这里似乎是必要的——这会让网站崩溃。有什么解决办法吗?你是对的,是的,对不起-
QSD
是Apache 2.4+吗?你可以使用
技巧。。。我正在检查您是否可以在
RewriteCond
上使用
[NC]
,而不是
RewriteRule
。我想现在已经整理好了标志。。。最初从
重写规则
中错过了
R=301
(您可以使用302进行临时重定向)。谢谢,但似乎不支持“和”标志,因为这也会导致站点关闭。删除它会导致重定向不触发。Dowp-我的坏
[和]
不存在-它是隐式的。。。我显然是尼古丁缺乏症或是什么:|
RewriteCond %{QUERY_STRING} ^type=contact [NC]
RewriteRule ^form.aspx  /customer-support/contact-us? [R]

RewriteCond %{QUERY_STRING} ^type=quote [NC]
RewriteRule ^form.aspx  /ask-an-expert? [R]