.htaccess 当URL中有一个“?”时,为什么我的重写规则不起作用

.htaccess 当URL中有一个“?”时,为什么我的重写规则不起作用,.htaccess,mod-rewrite,.htaccess,Mod Rewrite,我正在学习如何为.htaccess重定向编写正则表达式。 到目前为止,我已经设法找出了我所需要的一切,除了一些不符合我预期的正则表达式。我正在使用桌面应用程序测试正则表达式,它们在那里工作正常,但不在.htaccess文件中 仅供参考:RewriteBase设置为/site/ 这是传入的URL: /site/view by tag/politics/?el\u mcal\u month=3&el\u mcal\u year=2009 我想抓取“政治”并重定向到/site/tags/politic

我正在学习如何为.htaccess重定向编写正则表达式。 到目前为止,我已经设法找出了我所需要的一切,除了一些不符合我预期的正则表达式。我正在使用桌面应用程序测试正则表达式,它们在那里工作正常,但不在.htaccess文件中

仅供参考:RewriteBase设置为
/site/

这是传入的URL:
/site/view by tag/politics/?el\u mcal\u month=3&el\u mcal\u year=2009

我想抓取“政治”并重定向到
/site/tags/politics/

以下是我使用的:

RewriteRule^按标签查看/([a-zA-Z\-]+)/([a-zA-Z0-9\-\/\.\\\=\?\&]+)/tags/$1/[R=301,L]

我在
politics
之后添加了对所有字符的捕获,因为我遇到了一个问题,即当URL中存在
时,重定向不起作用,并且我无法找出原因。在上面给出的URL中,如果我删除
它可以正常工作,但是如果
在那里,则不会发生任何事情。这有什么原因吗

当我试图从
/site/?option=com\u content&view=article&id=307&catid=89&Itemid=55中捕获
307
时,也会发生同样的情况

我使用了这个正则表达式,
article&id=([0-9]+)/?p=$1[R=301,L]
,但是,当URL中有
时,它会停止重定向以执行任何操作

原因是什么


所讨论的
.htaccess
文件位于Wordpress博客(3.4.1)

如果您需要对其进行操作,则必须在
RewriteCond
中单独处理查询字符串,而不应在
RewriteRule
中进行匹配,只需匹配不包括查询字符串的请求即可,并使用
QSA
将查询字符串附加到重定向:

RewriteRule ^view-by-tag/([A-Za-z-]+)/?$ /tags/$1/ [R=301,L,QSA]
# OR, if you don't want the rest of the query string appended, put a `?` onto 
# the redirect to replace it with nothing
RewriteRule ^view-by-tag/([A-Za-z-]+)/?$ /tags/$1/? [R=301,L]
实际上,在
R
重定向中可能不需要
QSA
——我认为默认行为是通过重定向传递查询字符串

如果需要从查询字符串中捕获
307
,请在
RewriteCond
中执行,并在
%1
中捕获:

# Capture the id in %1
RewriteCond %{QUERY_STRING} id=([\d]+)
# Redirect everything to /, pass %1 into p
RewriteRule . /?p=%1 [LR=301,L]

您忽略的一点是重写引擎将URI分为两部分:请求URI和查询字符串。查询字符串部分未在规则匹配字符串中使用,因此没有必要构建规则regexp模式来查找它

通过使用“重写条件”和“条件正则表达式”来设置%N变量,可以从查询字符串中探测和挑选参数

默认情况下,查询字符串附加到输出替换字符串,除非其中包含
?someparam
——在这种情况下,除非使用[QSA](查询字符串附加)参数,否则将忽略该字符串

/site/?option=com\u content&view=article&id=307&catid=89&Itemid=55
中获取id的方法是使用以下内容:

RewriteCond %{QUERY_STRING} \bid=(\d+)

在规则之前,这会将
%1
设置为307。有关如何执行此操作的更多一般性讨论,请阅读

谢谢你的信息。我离开几天了。我来试试这个。知道这一点很有帮助。我非常喜欢学习更多关于正则表达式的知识。。。我推迟了很久的事情。我对TerryE的评论也是一样:谢谢你提供这些信息。我离开几天了。我来试试这个。知道这一点很有帮助。我非常喜欢学习更多关于正则表达式的知识。。。有些事情我已经推迟很久了。@inspiredlife学习正则表达式是实现启蒙的原则步骤,或者就像开始看穿矩阵一样。:-。是的,看穿矩阵,也许更重要的是,能够随意操纵和更改它!强大的东西。