重写重定向301和regexp不工作的规则

重写重定向301和regexp不工作的规则,regex,apache,.htaccess,mod-rewrite,Regex,Apache,.htaccess,Mod Rewrite,我对htaccess中的重定向301和重写规则没有什么问题 我有几千个子页面有新的链接,它们必须被永久重定向,但我可以用10-20条重写规则来管理它。但并不是每件事都像它应该的那样 基本重写规则工作正常,例如: RewriteRule ^subpage-([0-9]+)*\.html$ subpage.php?p=$1 [L] 它将我从subpage-1.html转换到subpage.php?p=1(这里不需要301,这只是一个例子,rewriterule完成了它的工作) 使用301重定向的简

我对htaccess中的重定向301和重写规则没有什么问题

我有几千个子页面有新的链接,它们必须被永久重定向,但我可以用10-20条重写规则来管理它。但并不是每件事都像它应该的那样

基本重写规则工作正常,例如:

RewriteRule ^subpage-([0-9]+)*\.html$ subpage.php?p=$1 [L]
它将我从subpage-1.html转换到subpage.php?p=1(这里不需要301,这只是一个例子,rewriterule完成了它的工作)

使用301重定向的简单重写规则也可以正常工作:

RewriteRule ^subfolder/subpage.php$ /subpage.html [L,R=301]
尽管我不知道为什么我必须在“新子页面”之前加“/”。如果我没有,我将被重定向到“域/整个ftp路径/新子页面.html”,而不是“域/新子页面.html”。这只是一件事吗

主要活动是:

RewriteRule ^subfolder/subpage.php?p=([0-9]+)$ /subpage-$1.html [L,R=301]
这没有任何作用,我得到的是domain/subfolder/subpage.php?p=1和404(旧的子页面不再存在于同一位置)


我做错了什么?

与查询字符串有关。如果只有一个子文件夹,可以尝试以下操作:

RewriteCond %{QUERY_STRING} p=([0-9]+)
RewriteRule .*$ /subpage-%1.html [L,R=301]
使用更多子文件夹,您可以尝试:

RewriteRule ^subfolder/subpage.php(.*)$ /subpage$1 [QSA]

RewriteCond %{QUERY_STRING} p=([0-9]+)
RewriteRule ^(.*)$ /$1-%1.html [L,R=301]

您无法匹配
重写规则
中的
查询字符串

.htaccess
替换为以下内容:

RewriteCond %{THE_REQUEST} \s/+subfolder/oldsubpage\.php\?f=([^\s&]+) [NC]
RewriteRule ^ /newsubpage-%1.html? [R=302,L]

RewriteCond %{THE_REQUEST} \s/+subfolder/oldsubpage\.php[\s/] [NC]
RewriteRule ^ /newsubpage.html? [R=302,L]

RewriteRule ^subpage-([0-9]+)*\.html$ /subpage.php?p=$1 [L,NC,QSA]

RewriteRule ^newsubpag\.html$ /newsubpage.php [L,NC]

这个.htaccess在哪里?@anubhava它在主网页文件夹中,带有index.php等-整个ftp路径/网页文件夹/OK你能把你的完整.htaccess放在这里吗?@anubhava
RewriteEngine在RewriteCond%{HTTP_HOST}^domain.xx$RewriteRule^子文件夹/oldsubage.php?p=([0-9]+)$/newsubpage-$1-blablablablablabla.html[L,R=301]RewriteRule^subfolder/oldsubpage.php$/newsubpage.html[L,R=301]RewriteRule^newsubpage.html$newsubpage.php[L]RewriteRule^newsubpage-([0-9]+)([a-zA-Z0-9-]+)*\.html$newsubpage.php?p=$1[L]
ok在下面发布了一个答案。谢谢,快到了,但还没到。我被重定向到newsubpage-$%25.html,而不是newsubpage-1.html。打字错误为什么是302而不是301?有一个打字错误我现在已经纠正了。一旦工作正常,您可以用301替换302。最好不要在测试模式下使用301。