Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php htaccess将丢失参数但保留变量_Php_Apache_.htaccess - Fatal编程技术网

Php htaccess将丢失参数但保留变量

Php htaccess将丢失参数但保留变量,php,apache,.htaccess,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”,没有“细节” 我们已经尝试了很多

大约一周后,我们必须在一个新域名上上线一个网站。但我们不想让每个人都得到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具有以下访问权限:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
但这不起作用。我怎样才能解决这个问题?(或者我应该为此创建一个新问题吗?

在您的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代码(永久移动)

更新:要重定向
default?id=
而不是
default?=
,只需在表达式中包含
id

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

这将使用HTTP 301代码(永久移动)将
/one/detail?id=12345-54321-21345-32145-43215
重定向到
/one/12345-54321-21345-32145-43215/

您的重写并没有执行客户端重定向-它纯粹是一个内部服务器端重写。你需要一个
[R=301]
,这样客户端的地址栏url就会被更改。嘿,虽然你的答案对我完全有效,但现场的网站有点不同(完全是我的错)。我已经编辑了这个问题,希望您也能对此给出一些见解/答案。答案更新为包含
detail?id=
的示例,而不是
detail?=
。您希望
id
位于第一个表达式(一对括号)之外。
RewriteCond %{QUERY_STRING} ^(?:detail)?id=([0-9-]+)$
RewriteRule ^one/detail$ http://newdomain.com/one/%1/? [NC,L,R=301]