0

我有一个正在重建的旧网站。它不使用文件夹结构,而是使用子域。段不同,但重定向本身非常简单。我可以这样处理:

RewriteRule ^segment/blog/view$ http://blogs.site.com/segment/article [R=301,NE,NC,L]
RewriteRule ^segment/blog$ http://blogs.site.com/segment [R=301,NE,NC,L]

因此,如果我有 www.site.com/segment/blog,它现在将转到 blogs.site.com/segment。如果我有 www.site.com/segment/blog/view/catchy_name_goes_here,目前它会将其重定向到 blogs.site.com/segment/article/catchy_name_goes_here,我需要它去这里:blogs.site.com/segment/article /吸引人的名字去这里。

我的问题来自于更改 URI 中的分隔符的决定。旧文章使用下划线“_”构建,新文章使用连字符“-”构建。

如何用连字符替换文章标题中的下划线?

4

2 回答 2

0

试试这些规则:

RewriteRule ^/segment/blog$ http://blogs.site.com/segment [R,I,L]

# replace _ by - repeatedly
RewriteRule ^(/segment/blog/view)/([^_]*)_+(.*)$ /$1/$2-$3 [I,N,U]

# all _s gone, now do a redirect
RewriteRule ^/segment/blog/view/([^_]+)$ http://blogs.site.com/segment/article/$1  [R,I,L,U]
于 2013-11-18T17:34:24.187 回答
0

我最终不得不使用以下内容。由于该网站的独特设置,我不知道这可能会影响多少人,但我想我会发布答案,以便它可以帮助任何可能需要它的人。

对此的完整设置是使用 Server 2k 运行 IIS 的服务器。该站点由几个静态内容页面、vb 脚本、经典 ASP、dot Net 组成,这些都与 ExpressionEngine 页面交织在一起。至少可以说是一团糟。最重要的是,Helicon Tech 的 ASAPI Rewrite Module 版本 3 正在服务器上运行以供 .htaccess 使用。没有子表达式、分组等被采用或被跟踪/处理。index.php 规则也被绕过了。

综上所述,我最终得到了以下内容,它解析了我需要的所有内容。

RewriteRule ^index.php/segment/blog/view/([^_]*)_+(.*)$ http://www.site.com/index.php/segment/blog/view/$1-$2 [R,NC]
RewriteRule ^index.php/segment/blog/view/([^_]*)$ http://blogs.site.com/segment/article/$1  [R=301,I,L,U]
RewriteRule ^segment/blog$ http://blogs.site.com/segment [R=301,NE,NC,L]
RewriteRule ^/segment/blog$ http://blogs.site.com/segment [R,I,L]
于 2013-11-21T22:36:13.527 回答