【问题标题】:.htaccess rewrite without www AND redirect to subdirectory.htaccess 重写不带 www 并重定向到子目录
【发布时间】:2010-10-21 09:28:57
【问题描述】:

我想重定向

  • www.example.com/*example.com/*

同时重定向

  • example.com/*example.com/forum/*

但我也有/wiki//blog//style/,所以我不想重定向

  • example.com/style/*example.com/forum/style/*

这是我目前所拥有的,但工作不正常:

Options +FollowSymLinks
RewriteEngine On

RewriteBase /

RewriteCond %{HTTP_HOST} !^example\.com$ [NC]
RewriteRule ^(.*)$ http://example.com/$1 [R=301,L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !^/forum/
RewriteRule ^(.*)$ forum/$1 [R=301,L]

澄清:我的问题可以用更简单的方式提出。

我想重定向一个空的REQUEST_URI/,或者一个仅在根目录中不存在的文件/forum/

【问题讨论】:

  • 这是我目前所拥有的,但工作不正常:Options +FollowSymLinks RewriteEngine On RewriteBase / RewriteCond %{HTTP_HOST} !^example\.com$ [NC] RewriteRule ^(. *)$ example.com/$1 [R=301,L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_URI} !^/forum/ RewriteRule ^(.*)$ forum/$1 [ R=301,L]
  • 这从未得到答复。你有没有找到一种方法来重定向到论坛而不结束 www.example.com 而不仅仅是 example.com?

标签: apache .htaccess mod-rewrite redirect rewrite


【解决方案1】:

试试这个:

RewriteEngine On

RewriteCond %{HTTP_HOST} ^example\.com
RewriteRule ^(.*)$ http://example.com/$1 [R=301,QSA,L]

RewriteCond %{REQUEST_URI} !^/(wiki|blog|style|forum)
RewriteRule ^(.*)$ http://www.example.com/forum/$1 [R=301,QSA,L]

【讨论】:

  • 没有指定所有子目录就没有办法了吗?我目前只有 4 个,但以后可能会有更多...感谢您的回答!
【解决方案2】:

我会使用这些规则:

# redirect www.example.com to example.com
RewriteCond %{HTTP_HOST} ^www\.example\.com$
RewriteRule ^ http://example.com%{REQUEST_URI} [L,R=301]

# prefix everything but /forum/, /wiki/, /blog/, /style/ with /forum/ and rediret to it
RewriteRule !^(forum|wiki|blog|style)/ /forum%{REQUEST_URI} [L,R=301]

第二条规则可以另外替换为这条规则,以检查每个请求的第一个路径段是否存在。

# check if first segment of requested URI path is either missing
RewriteCond $0 ^$ [OR]
# or cannot be mapped to an existing directory
RewriteCond %{DOCUMENT_ROOT}$0/ !-d
RewriteRule ^[^/]* /forum%{REQUEST_URI} [L,R=301]

【讨论】:

    【解决方案3】:

    我会说这应该可行。

    RewriteEngine on
    RewriteRule ^forum/(.*)$ forum/$1 [L]
    RewriteRule ^wiki/(.*)$ wiki/$1 [L]
    RewriteRule ^blog/(.*)$ blog/$1 [L]
    RewriteRule ^style/(.*)$ style/$1 [L]
    
    RewriteRule ^(.*)$ forum/$1 [L]
    
    RewriteCond  %{HTTP_HOST}  ^www.example\.com$
    RewriteRule ^(.*)$ http://example.com/$1
    

    【讨论】:

      【解决方案4】:

      除了你的 www/no www 问题,我没有任何答案,你可以试试这个:

      # Enforce www
      # If you have subdomains, you can add them to 
      # the list using the "|" (OR) regex operator
      RewriteCond %{HTTP_HOST} !^(www|subdomain) [NC]
      RewriteRule ^(.*)$ /exemple/$1 [L,R=301]
      
      # Enforce NO www
      RewriteCond %{HTTP_HOST} ^www [NC]
      RewriteRule ^(.*)$ http://exemple.com/$1 [L,R=301]
      

      【讨论】:

        猜你喜欢
        • 2013-07-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-06-02
        • 1970-01-01
        • 1970-01-01
        • 2021-05-12
        • 2013-09-18
        相关资源
        最近更新 更多