Php htaccess将丢失参数但保留变量
大约一周后,我们必须在一个新域名上上线一个网站。但我们不想让每个人都得到404,所以我们想重定向每个人 我们的问题是, 旧链接: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”,没有“细节” 我们已经尝试了很多
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]