首页 文章

具有重定向301和regexp无效的重写器

提问于
浏览
2

我在htaccess中重定向301和rewriterule的问题很少 .

我有几千个带有新链接的子页面,必须重新定向,但我可以用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]

这没有任何作用,我得到域/子文件夹/ subpage.php?p = 1 404(旧的子页面不再存在于同一位置) .

我做错了什么?

2 回答

  • 1

    与查询字符串有关 . 如果您只有一个子文件夹,可以试试这个:

    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]
    
  • 0

    您无法在 RewriteRule 中匹配 QUERY_STRING .

    用这个替换你的 .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]
    

相关问题