Regex 当有?id时重写规则=

Regex 当有?id时重写规则=,regex,.htaccess,mod-rewrite,Regex,.htaccess,Mod Rewrite,我试图在.htaccess中编写重写规则,但遇到了问题 我尝试从以下位置重定向: blog/entrada.php?id=2 致: 这是我尝试过但不起作用的多种方法之一: RewriteRule ^blog\/entrada\.php\?id=2$ /blog/3D-touch [L,R=301] 我的规则有什么问题。如何有效地重定向 感谢使用此代码 RewriteRule blog/(.*) blog/entrada.php?id=$1 此代码将所有包含blog/的URL重定向到blo

我试图在.htaccess中编写重写规则,但遇到了问题

我尝试从以下位置重定向:

blog/entrada.php?id=2 
致:

这是我尝试过但不起作用的多种方法之一:

RewriteRule ^blog\/entrada\.php\?id=2$ /blog/3D-touch [L,R=301]
我的规则有什么问题。如何有效地重定向

感谢使用此代码

RewriteRule blog/(.*) blog/entrada.php?id=$1
此代码将所有包含blog/的URL重定向到blog/entrada.php,并将blog/的值置于$\u GET['id']

您应该在htaccess文件的顶部位置有以下代码n

Options +FollowSymLinks
RewriteEngine on

Querystring不是RewriteRule指令中match的一部分,若要重定向查询字符串,需要使用RewriteCond以下选项之一:

选项1

RewriteEngine on

RewriteCond %{THE_REQUEST} /blog/entrada\.php\?id=2 [NC]
RewriteRule ^ /blog/3D-touch? [NC,L,R]
选项2

RewriteEngine on

RewriteCond %{QUERY_STRING} ^id=2$ [NC]
RewriteRule ^blog/entrada\.php$ /blog/3D-touch? [NC,L,R]
我们在目标url的末尾使用一个空问号来丢弃旧的查询字符串,否则默认情况下这些查询字符串会出现在目标url上


如果要使重定向永久化,请将R更改为R=301

我不明白您的答案。我不想将所有包含blog/的url重定向到blog/entrada.php。我在问题中说,我需要直接从blog\/entrada\.php\?id=2到/blog/3D-touch,或者当用户输入/blog/3D-touch.php请求转到blog\entrada.php?id=2?blog/entrada.php?id=2时,实际上什么是相同的3D-touch.php(因为我有另一个规则要去掉.php)。这就是为什么我希望这两个选项非常有效。在选项1重写规则中,你为什么写“^你能解释一下吗?
RewriteEngine on

RewriteCond %{QUERY_STRING} ^id=2$ [NC]
RewriteRule ^blog/entrada\.php$ /blog/3D-touch? [NC,L,R]