htaccess 丢失参数但保留变量


htaccess lose parameter but keep variable

在大约一周内,我们必须在新域上线一个网站。但我们不希望每个人都得到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',没有'detail?='

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

我一直在当地尝试,

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:Detail?=变成了Detail?id=,因为我表述错了。

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

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

但这行不通。我该如何解决这个问题?(或者我应该为此创建一个新问题?

在 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重定向到带有HTTP 301 code(永久移动)的/one/12345-54321-21345-32145-43215/

更新:要重定向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重定向到带有HTTP 301 code(永久移动)的/one/12345-54321-21345-32145-43215/