htaccess丢失参数但保持变量

时间:2016-03-18 16:13:14

标签: php apache .htaccess

在大约一周内,我们必须使用新域名的网站。但我们并不希望每个人都能获得404,所以我们希望重定向所有人。

我们的问题如下:

旧链接: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网站 EDIT2:详细信息?=更改为详细信息?id =因为我说错了。

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

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

但这并不奏效。我怎样才能解决这个问题? (或者我应该为此创建一个新问题?)

1 个答案:

答案 0 :(得分: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(永久移动)。

更新:要重定向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(永久移动)。