2016-03-18 17 views
1

大约一周之内,我们必须在一个新的域名上使用网站。但我们不希望每个人都得到404,所以我们想要重定向每个人。htaccess失去参数,但保持可变

我们的问题是其次,

旧的链接:http://www.example.com/one/detail?id=12345-54321-21345-32145-43215
新链接:http://www.newpage.com/one/12345-54321-21345-32145-43215/

所以我们想要的仅仅是 '12345-54321-21345-32145-43215',没有“细节?=”

我们已经尝试了很多东西,但由于某种原因,我们不能失去的‘细节'=’

我一直试图在本地的,

NEWPAGE具有以下的htaccess:

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

示例页面已经改变了很多次试图找出什么,这将是无用的发布吧..

编辑:这两个网站上生活是wordpress网站 编辑2:细节?=改为细节?编号=因为我制定了错误的。

答案适用于以前的问题。我试图将其更改为

RewriteCond %{QUERY_STRING} ^(?:id)?=([0-9-]+)$ 
RewriteRule ^one/detail/id$ http://newdomain.com/one/%1/? [NC,L,R=301] 

但这不起作用。我怎样才能解决这个问题? (?或者我应该只是创建了一个新的问题,为此)

+0

您的重写不会执行客户端重定向 - 它纯粹是内部服务器端重写。你需要一个'[R = 301]',这样客户端的地址栏中的url就会被更改。 –

回答

2

在你的htaccess,添加:

RewriteCond %{QUERY_STRING} ^(?:detail)?=([0-9-]+)$ 
RewriteRule ^one/detail$ http://newdomain.com/one/%1/? [NC,L,R=301] 

这将重定向到/one/detail?=12345-54321-21345-32145-43215/one/12345-54321-21345-32145-43215/一个HTTP 301 code(永久移动)。

UPDATE:重定向default?id=,而不是default?=你可以只包括在表达式中id

RewriteCond %{QUERY_STRING} ^(?:detail)?id=([0-9-]+)$ 
RewriteRule ^one/detail$ http://newdomain.com/one/%1/? [NC,L,R=301] 

这将重定向到/one/detail?id=12345-54321-21345-32145-43215/one/12345-54321-21345-32145-43215/一个HTTP 301 code(永久移动)。

+0

嘿,那里,虽然你的答案完全为我工作,但现场有点不同(完全是我的错)。我编辑了这个问题,希望你能对此提供一些见解/答案。 – Evergetic

+0

答案已更新,以包含“detail?id ='而不是'detail?='的示例。你想在第一个表达式(括号对)之外使用'id'。 – Egg

+0

非常感谢!这工作! – Evergetic

相关问题