代码之家  ›  专栏  ›  技术社区  ›  Cypher

如何使用mod ou rewrite来更改根据URL的子域提取的文件?

  •  0
  • Cypher  · 技术社区  · 15 年前

    假设我有一个被请求的网址:

    sub.domain/file.bin

    我想把这个文件取出来:

    domain/hosted/sub/file.bin

    我如何构造重写指令?我已经为此工作了好几天了,这让我头疼……

    子域是众多的,并且经常被添加和删除,所以我试图找到一个适用于所有子域的解决方案。

    3 回复  |  直到 10 年前
        1
  •  1
  •   Ignacio Vazquez-Abrams    15 年前

    在sub.domain的httpd配置中:

    RewriteCond %{HTTP_HOST} ([^\.]+).domain
    RewriteRule ^/file.bin$ http://domain/hosted/%1/file.bin
    
        2
  •  1
  •   Richard JP Le Guen    15 年前

    假设主目录 www.domain.com domain/ 并且-给定任何子域 sub.domain.com -您希望该子域的主目录的文件位于 domain/hosted/sub/

    尝试如下操作:

    RewriteEngine on
    
    // If the host is just mydomain.com, do nothing more
    // this is to prevent some recursion problems I've read of...
    RewriteCond %{HTTP_HOST} ^(www\.)?mydomain\.com$ [NC]
    RewriteRule ^.*$ - [L]
    
    // Otherwise strip off everything before mydomain
    // And add it to the start of the request
    RewriteCond %{HTTP_HOST} ^(.*?)\.(www\.)?mydomain\.com$ [NC]
    RewriteRule ^.*$ %1%{REQUEST_URI} [QSA]
    
    // Then prefix with 'hosted'
    RewriteRule ^(.*)$ hosted/$1 [QSA,L]
    

    您可能还需要在DNS中输入通配符或其他…但是我承认dns和htaccess mod rewrite是我的弱点。也见 http://www.webmasterworld.com/forum92/138.htm

        3
  •  1
  •   Gumbo    15 年前

    试试这个规则:

    RewriteCond %{HTTP_HOST} ^([^/.]+)\.example\.com$
    RewriteCond %1 !=www
    RewriteRule !^hosted/ hosted/%1%{REQUEST_URI} [L]