Php 将查询附加到htaccess中所有定义的重写规则的公共重写规则

Php 将查询附加到htaccess中所有定义的重写规则的公共重写规则,php,apache,.htaccess,mod-rewrite,url-rewriting,Php,Apache,.htaccess,Mod Rewrite,Url Rewriting,我想从旧站点URL重定向到新站点URL。 我在htaccess文件中有很多规则。 见下例: RewriteRule ^blog/one$ http://www.newsite.com/blog/x/ [R=301,L] RewriteRule ^blog/two$ http://www.newsite.com/blog/y/ [R=301,L] RewriteRule ^blog/three$ http://www.newsite.com/blog/z/ [R=301,L] and so on.

我想从旧站点URL重定向到新站点URL。 我在htaccess文件中有很多规则。 见下例:

RewriteRule ^blog/one$ http://www.newsite.com/blog/x/ [R=301,L]
RewriteRule ^blog/two$ http://www.newsite.com/blog/y/ [R=301,L]
RewriteRule ^blog/three$ http://www.newsite.com/blog/z/ [R=301,L]
and so on..........
重定向工作正常。 现在我想向所有目标URL追加一个查询字符串“?key=value&anotherKey=anotherValue”。 有没有一种方法可以通过一行代码来完成这项任务? 或者我需要一个接一个地将此查询附加到所有URL

下面是我想要的一个例子:

RewriteRule ^blog/one$ http:www.newsite.com/blog/x/?key=value&anotherKey=anotherValue [R=301,L]
编辑: 完全访问:

<IfModule mod_rewrite.c>

RewriteEngine On
RewriteBase /

#Custom redirection Starts form here

RewriteCond %{QUERY_STRING} ^$
RewriteRule ^.*$ $0?key=value&anotherKey=anotherValue [L,NC]

#home page redirection
RewriteRule ^$ http://newsite.com/ [R=301,L]

#Blog Rewrite Rules
RewriteRule     ^blog/this-blog-is-included-for-redirection/?$ http://newsite.com/blog/ [R=301,L]

#Custom redirection ends here


RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

重新启动发动机
重写基/
#自定义重定向从这里开始
重写cond%{QUERY_STRING}^$
重写规则^.*$$0?键=值&另一个键=另一个值[L,NC]
#主页重定向
重写规则^$http://newsite.com/ [R=301,L]
#博客重写规则
重写规则^blog/包含此日志以进行重定向/?$http://newsite.com/blog/ [R=301,L]
#自定义重定向到此结束
重写规则^index\.php$-[L]
重写cond%{REQUEST_FILENAME}-F
重写cond%{REQUEST_FILENAME}-D
重写规则/index.php[L]
当我访问此url时: oldsite.com/blog/this-blog-is-include-for-redirection/

它重定向到: newsite.com/blog/?key=value&anotherKey=anotherValue

这很好

当我访问此URL时: oldsite.com/blog/this-blog-is-exlude-for-redirection/

它重定向到: oldsite.com/blog/此博客不允许重定向/?key=value&anotherKey=anotherValue


这里我不想附加查询。

您可以在重定向规则之前保留一个通用规则来设置查询字符串,重定向规则将自动将查询字符串传递到目标URI:

RewriteEngine On

# generic rule for query string
RewriteCond %{QUERY_STRING} ^$
RewriteRule ^blog/(?:one|two|three)/?$ $0?key=value&anotherKey=anotherValue [L,NC]

RewriteRule ^blog/one/?$ http://www.newsite.com/blog/x/ [R=301,L,NC]
RewriteRule ^blog/two/?$ http://www.newsite.com/blog/y/ [R=301,L,nC]
RewriteRule ^blog/three/?$ http://www.newsite.com/blog/z/ [R=301,L,NC]

规则正在起作用。我想通过一行或几行代码将查询字符串附加到所有目标url。有办法吗?你可以这样做
http://www.newsite.com/blog/x/?param1=x¶m2=y
[R=301,L,QSA]
好吧,您可以将所有博客的
/block/(.*)
重写为
../blog/$1?key=…
。问题是您有一个重定向,而不是重写,所以这可能会导致无限循环,所以您可能需要优化正则表达式或添加conditions@SahilGulatihtaccess文件中有数百行。将查询参数逐个粘贴到所有URL不是一个好主意。我只是在您的规则中添加了R=301,即重写规则^blog/(?:一|二|三)/?$$0?key=value&anotherKey=anotherValue[R=301,L,NC]现在工作正常。在此之前,url“oldsite.com/blog”不起作用,url“oldsite.com/blog/”和“oldsite.com/blog/anywhere”只起作用。你能解释一下你的答案吗?我们可以在htaccess文件的任何地方使用通用规则吗?当然可以。我只添加了一条通用规则。该规则检查是否没有查询字符串,当该条件成功时,它会在模式
^blog/(?:一|二|三)/?$
定义的某些选定URI中添加所需的查询字符串。因此,下一组规则已经附加了公共查询字符串。当它重定向到newsite.com时,它会附加查询字符串,这很好,但我已经从重定向中排除了一些URL,并且它还会将查询附加到该URL。如何避免将查询附加到oldsite.com我已从重定向中排除了一些URL:您是否可以显示有问题的full.htaccess以显示您如何排除这些URL。另外,是否要从此重定向中排除所有
oldsite.com
的URL?我已更新了我的问题。我不想排除所有URL。