.htaccess 重写URL以重定向并删除前导零

.htaccess 重写URL以重定向并删除前导零,.htaccess,mod-rewrite,redirect,url-rewriting,bluehost,.htaccess,Mod Rewrite,Redirect,Url Rewriting,Bluehost,我有两个博客在两个不同的领域,我整合到一个网站上。我对服务器管理员不太熟悉,但我99%确信我想在bluehost上做的事情是可能的(因为它们允许.htaccess)并使用mod_rewrite(或类似工具) 目前,我有blog1.com和blog2.com,发布的URL看起来像blog1.com/001和blog2.com/030。我想要的是,任何输入其中一个URL的人都可以重定向到example.com/blog1/1和example.com/blog2/30 这意味着我需要: 将整个域重定向

我有两个博客在两个不同的领域,我整合到一个网站上。我对服务器管理员不太熟悉,但我99%确信我想在bluehost上做的事情是可能的(因为它们允许.htaccess)并使用mod_rewrite(或类似工具)

目前,我有
blog1.com
blog2.com
,发布的URL看起来像
blog1.com/001
blog2.com/030
。我想要的是,任何输入其中一个URL的人都可以重定向到
example.com/blog1/1
example.com/blog2/30

这意味着我需要:

  • 将整个域重定向到我的新域上的文件夹
  • 将点击重定向到带前导零的URL到不带前导零的URL
  • 这可能意味着将
    blog1.com/001
    example.com/blog1/001
    重定向到
    example.com/blog1/1
  • 已更新

    在第一和第二个条件满足,但规则不开火

    第三个完全中断并返回古怪:
    http://example.com/blog1/030log1/030

    RewriteEngine On
    
    # redirect blog1.com/030 => example.com/blog1/30
    RewriteCond %{HTTP_HOST} ^(?:www\.)?(blog1|blog2)\. [NC]
    RewriteRule ^0*([1-9]+)/?$ http://example.com/%1/$1 [R=301,L]
    
    # redirect example.com/blog1/030 => example.com/blog1/30
    RewriteCond %{HTTP_HOST} ^(?:www\.)?example\.com$ [NC]
    RewriteRule ^(blog1|blog2)/0*([1-9]+)/?$ /$1/$2 [NC,R=301,L]
    
    # Never use www
    RewriteCond %{HTTP_HOST} ^www.(([a-z0-9_]+.)?example.com)$ [NC]
    RewriteRule .? http://%1%{REQUEST_URI} [R=301,L]]
    

    您可以在
    blog1
    blog2
    域的
    DOCUMENT\u ROOT/.htaccess
    文件中使用此代码:

    RewriteEngine On
    
    RewriteCond %{HTTP_HOST} ^(?:www\.)?(blog1|blog2)\. [NC]
    RewriteRule ^0*([1-9]+)/?$ http://example.com/%1/$1 [R=302,L]
    
    # rule2 for example.com/blog1/030 => example.com/blog1/30
    RewriteCond %{HTTP_HOST} ^(?:www\.)?example\.com$ [NC]
    RewriteRule ^(blog1|blog2)/0+([1-9]+)/?$ /$1/$2 [NC,R=302,L]
    
    • %1
      RewriteCond
    • ^0*([1-9]+)
      将匹配所有前导零,
      $1

    这似乎很简单。谢谢你的解释。是普通正则表达式规则吗?子集?超集?我正在测试这一点,规则也起作用了(太棒了,谢谢!),但是
    example.com/a/030
    没有像预期的那样重定向到
    example.com/a/30
    。这需要是它自己的条件/规则吗?但什么是
    /a/
    目录。此规则从
    RewriteCond
    中获取主机名部分,并且在新请求中没有
    a
    。很抱歉,我做了这样的事情,您混淆了示例,混淆了试图帮助您的人。我的意思是:
    example.com/blog1/030
    不会像预期的那样重定向到
    example.com/blog1/30
    。这需要它自己的条件/规则吗。永远不要在评论中发布代码,没有人可以阅读它。2.不要在那个网站上测试,它是不可靠的。清楚地告诉哪个URL它不工作