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

时间:2014-01-22 11:34:44

标签: regex apache .htaccess mod-rewrite

我在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(旧的子页面在同一位置不再存在)。

我做错了什么?

2 个答案:

答案 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]