Php .htaccess 301将正则表达式从DotNetNuke重定向到Wordpress

Php .htaccess 301将正则表达式从DotNetNuke重定向到Wordpress,php,regex,wordpress,.htaccess,redirect,Php,Regex,Wordpress,.htaccess,Redirect,我正在把一个老的DotNetNuke网站迁移到Wordpress上,虽然这个老网站的架构很糟糕,经常会崩溃——但这个网站有相当多的SEO信誉。所以,我不想丢失任何东西,但是正则表达式正在为基于.htaccess的301重定向杀死我 下面是一个旧域帖子的示例: 以下是新版本的外观: 任何帮助都将不胜感激。我在网站上帮助一个朋友(这不是我的),我根本不想让他退步,而且我对Regex不太在行 谢谢大家! 用于重定向 http://yoursite.com/tabid/57/listid/4379/

我正在把一个老的DotNetNuke网站迁移到Wordpress上,虽然这个老网站的架构很糟糕,经常会崩溃——但这个网站有相当多的SEO信誉。所以,我不想丢失任何东西,但是正则表达式正在为基于.htaccess的301重定向杀死我

下面是一个旧域帖子的示例:

以下是新版本的外观:

任何帮助都将不胜感激。我在网站上帮助一个朋友(这不是我的),我根本不想让他退步,而且我对Regex不太在行

谢谢大家!

用于重定向

http://yoursite.com/tabid/57/listid/4379/Home++Garden/Life+in+Shambles+How+to+Be+Organized.aspx

您必须在虚拟主机配置的服务器配置中进行设置

RewriteMap lowercase int:tolower
.htaccess
文件中

RewriteEngine On
RewriteRule ^([^+]*)\+(.*)$ $1-$2 [L]

RewriteCond "%{REQUEST_URI}" "[A-Z]"
RewriteRule "(.*)" "${lowercase:$1}" [NC]
RewriteRule /([^/+]+)\.aspx http://newsite.com/$1/ [R=301,L]
RewriteMap
指令定义了可在规则替换中使用的重写映射

RewriteRule^([^+]*)\+(.*)$$1-$2[L]
将所有+替换为-

重写规则“(.*)”${lowercase:$1}”[NC]
转换为小写

RewriteRule/([^/+]+)\.aspxhttp://newsite.com/$1/[R=301,L]
执行重定向


如果您需要用一个替换连续字符+,只需使用
RewriteRule^([^+]*)[+]+(.*)$$1-$2[L]
而不是
RewriteRule^([^+]*)\+(.*$$1-$2[L]

是否已导入内容并定义了url结构???@QQQ是-对此我很抱歉。所有内容都很重要,URL结构现在已经定义。从上面的例子来看,这个帖子的名字是“生活在混乱中如何组织”。在新的URL结构中,它将是“生活在混乱中如何组织”。好吧,抓住最后一个
/
和后缀
.aspx
之间的部分相当容易,但是“翻译”是很容易的将其转换为小写超出了重写规则的能力(可以使用
RewriteMap
,但在.htaccess上下文中不可用),并且将所有空格转换为破折号也不是那么简单。您最好设置一个脚本,让它传递新重写结构未捕获的所有内容,然后在进行必要的字符串操作后进行重定向。您需要创建另一个重写映射来处理所有
+
-
,因为您的重写映射只会在前2次中执行。太棒了!它可能是另一种形式。这是没有必要的。第一次重写将进行重定向(找到匹配项时将其设置为最后一个规则)循环,直到替换所有+为止。但是,使用ReWrimeMax,这可能是一个更好的服务器性能,因为它有几个重定向是简单的,不是一个好的方法来做它,因为有几件事你必须考虑,包括内存,性能,重定向量和限制,将双加号替换为单个加号,或是在示例之后双冲刺成单破折号,因为它将转换所有的,等等,这就是为什么我不认为这是一个选项,即使用<代码> ReWrimeMax < /Cl> >我认为这个工作的总负荷是不合适的。但是请求了一个基于htaccess的301重定向解决方案,并且该代码对于提供的示例非常有效。事实上,只要URL的最后一部分没有双加号,并且用户可以访问服务器配置,该代码就可以正常工作
RewriteEngine On
RewriteRule ^([^+]*)\+(.*)$ $1-$2 [L]

RewriteCond "%{REQUEST_URI}" "[A-Z]"
RewriteRule "(.*)" "${lowercase:$1}" [NC]
RewriteRule /([^/+]+)\.aspx http://newsite.com/$1/ [R=301,L]