首页 > 解决方案 > 使用 HTACCESS 进行重定向,包括 GET 参数

问题描述

我按原样定义了一个特定的 .htaccess,以便将所有流量从根文件夹重新路由到子文件夹中的相同 URL,但子域除外。

这是我的文件:

#RewriteEngine on 
#RewriteRule ^(.*)$ http://www.mydomain.fr/blog/$1 [R=301,QSA]
<IfModule mod_rewrite.c>

RewriteEngine On
RewriteCond %{HTTP_HOST} !^joe\.mydomain\.fr$ [NC]
RewriteCond %{HTTP_HOST} !^lab\.mydomain\.fr$ [NC]
RewriteCond %{REQUEST_URI} !^joe(.*)
RewriteCond %{REQUEST_URI} !^lab(.*)
RedirectMatch ^/$ http://www.mydomain.fr/blog/

</IfModule>

该文件完全符合我的要求:www.mydomain.fr/wp-admin例如,当我输入类似的内容时,它将重定向到www.mydomain.fr/blog/wp-admin,但会排除子域joe.mydomain.frlab.mydomain.fr从重定向中排除。

但是,发生的情况是,如果我转到joe.mydomain.fr?test=1,服务器只会将我重定向到,joe.mydomain.fr但 GET 参数会消失。

我怎样才能避免这种情况?

我尝试用 or 替换[NC][QSA][R=301,QSA]出现内部服务器错误。

谢谢。

标签: wordpress.htaccess

解决方案


在花了一天时间记录 .htaccess 文件的实际工作方式之后,我终于能够使用以下文件解决我的问题,灵感来自 Abhishek Gurjar 的文件:

Options +FollowSymLinks
RewriteEngine On
RewriteBase /s

<IfModule mod_rewrite.c>

RewriteEngine On
RewriteCond %{HTTP_HOST} !^joe\.mydomain\.fr$ [NC]
RewriteCond %{HTTP_HOST} !^lab\.mydomain\.fr$ [NC]
RewriteCond %{HTTP_HOST} !^blog\.mydomain\.fr$ [NC]
RewriteCond %{REQUEST_URI} !/joe
RewriteCond %{REQUEST_URI} !/lab
RewriteRule ^(.*)$ http://www.mydomain.fr/blog/$1 [R=301]

</IfModule>

仅供参考,我的提供商 1&1 显然必须使用前 3 行...

我改变的是 REQUEST_URI 从!^joe(.* )!^lab(.*)!/joe!/lab然后排除 blog.mydomain.fr URL 以避免 blog.mydomain 出现问题.fr/joe 或 blog.mydomain.fr/lab 如果有一天我使用它们。

最后,我不得不将我的 1&1 客户端界面中的子域重定向到我的网站空间的子文件夹,而不是硬的 URL,这意味着:

现在,该配置允许我输入诸如 joe.mydomain.fr?dnt=1 之类的 URL,同时重定向到http://www.mydomain.fr/joe?dnt=1,这正是我想要做的。

我希望这对其他人有帮助。谢谢您的帮助。


推荐阅读