我在htaccess中重定向301和重写的问题很少。
我有几千个带有新链接的子页面,必须永久重定向,但我可以用10-20个重写来管理它。但并非所有事情都应该如此......
基本的rewriterule工作正常,例如:
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]
通过我不知道为什么我必须在“new-subpage”之前加上“/”。如果我不这样做,我将被重定向到“domain / whole-ftp-path / new-subpage.html”而不是“domain / new-subpage.html”。它只是重定向301的东西吗?
主要事件:
RewriteRule ^subfolder/subpage.php?p=([0-9]+)$ /subpage-$1.html [L,R=301]
这没有任何作用,我正在使用404获取domain / subfolder / subpage.php?p = 1(旧的子页面在同一位置不再存在)。
我做错了什么?
答案 0 :(得分:1)
您无法与QUERY_STRING
中的RewriteRule
匹配。
将此.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]
答案 1 :(得分:0)
与查询字符串有关。如果您只有一个子文件夹,可以试试这个:
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]