Apache htaccess从子域获取值并重定向到新url

Apache htaccess从子域获取值并重定向到新url,apache,.htaccess,Apache,.htaccess,我有一个像这样的url设置 sub.domain.com/leadboards/showlist/APPNAME/SCORE/DEVICEID 我正在尝试使用网站根目录中的htaccess,而不是子域来将该url转发到 domain2.com/get/APPNAME/leadboards/SCORE/DEVICEID 当我在子域htaccess中使用此代码时,我能够使其工作 RewriteRule ^showList/([A-Za-z0-9-_]+)/([A-Za-z0-9-_]+)/([A-Z

我有一个像这样的url设置

sub.domain.com/leadboards/showlist/APPNAME/SCORE/DEVICEID

我正在尝试使用网站根目录中的htaccess,而不是子域来将该url转发到

domain2.com/get/APPNAME/leadboards/SCORE/DEVICEID

当我在子域htaccess中使用此代码时,我能够使其工作

RewriteRule ^showList/([A-Za-z0-9-_]+)/([A-Za-z0-9-_]+)/([A-Za-z0-9-_]+)/?$ http://domain2.com/get/$1/leaderboard/$2/$3/ [NC,L]
然而,这在根htaccess中不起作用,所以我尝试了一点我在网上找到的所有东西,但我不知道如何获得上面提到的参数。这就是它目前的样子,它什么都不做

RewriteCond %{HTTP_HOST} ^sub\.domain\.com$ [NC]
RewriteRule ^showList/([A-Za-z0-9-_]+)/([A-Za-z0-9-_]+)/([A-Za-z0-9-_]+)/?$ http://domain2.com/get/$1/leaderboard/$2/$3 [NC,L]

根据我的理解,重写条件应该只包括子域上的人,并且规则应该与子域中的规则一样工作,对吗

我认为您遇到的问题是,现在您的
.htaccess
文件位于不同的目录中

指令
RewriteRule
与当前目录相匹配,因此假设子域位于父目录(现在包含.htaccess)下名为
sub
的文件夹中,您需要使用
RewriteRule^sub/showList
进行匹配

另一种保持简单的方法是在
RewriteCond
中对
%{REQUEST\u URI}
进行匹配,然后使用%backreferences引用这些匹配。请参见下面的示例:

RewriteCond %{HTTP_HOST} ^sub\.domain\.com$ [NC]
RewriteCond %{REQUEST_URI} ^/showList/([A-Za-z0-9-_]+)/([A-Za-z0-9-_]+)/([A-Za-z0-9-_]+)/?$ 
RewriteRule .* http://domain2.com/get/%1/leaderboard/%2/%3 [NC,L]

嗯,我知道你在做什么,我想我完全理解,但无论我做什么,我都会不断得到:在这台服务器上找不到请求的URL/排行榜/showList/APPNAME/SCORE/DEVICEID。此外,尝试使用ErrorDocument处理请求时遇到404 Not Found错误。@Dave噢,您缺少重定向请求的
R
。尝试将
[NC,L]
更改为
[NC,L,R]
。在完成开发并知道它可以工作后,如果这是一个永久重定向(有利于SEO),您可以使用
[NC,L,R=301]