php - 带有 .htaccess 或 PHP 的动态子域页面

标签 php apache .htaccess ubuntu subdomain

我有这样的目录:

  • /index.php(网站主页)
  • /网站
  • 站点1
  • 站点2
  • 站点3


  • 当我去 site1.example.com ,我希望它显示 example.com/sites/site1/index.php
  • 当我去 site1.example.com/page1 ,我希望它显示文件 example.com/sites/site1/page1.php

  • 我怎样才能做到这一点?谢谢!

    最佳答案

    我假设您的所有子域都指向与主域相同的位置,所以 subdomain.example.comexample.com指向同一个地方。

    .htaccess 中尝试类似以下的操作主站点根目录下的文件:

    RewriteEngine On
    
    # Exclude requests for the www subdomain
    RewriteCond %{HTTP_HOST} ^www\. [NC]
    RewriteRule ^ - [L]
    
    # Requests for the site root
    RewriteCond %{HTTP_HOST} ^(.+)\.example\.com [NC]
    RewriteRule ^$ sites/%1/index.php [L]
    
    # Requests that are "assumed" to be .php files
    RewriteCond %{HTTP_HOST} ^(.+)\.example\.com [NC]
    RewriteRule ^([^.]*)$ sites/%1/$1.php [L]
    
    # All other requests
    RewriteCond %{HTTP_HOST} ^(.+)\.example\.com [NC]
    RewriteRule !^sites/ sites/%1%{REQUEST_URI} [L]
    

    这假定有效的 URL 路径不包含点。
    %1是对 CondPattern(即子域)和 $1 中捕获的组的反向引用是对 RewriteRule 中捕获的组的反向引用图案。

    但是,您想如何处理非 PHP 文件和其他静态资源?

    Also, how can I do a 404 page?



    您可以定义自定义错误文档。例如:
    ErrorDocument 404 /errors/404.php
    

    但是,您需要在 .htaccess 的顶部创建一个异常(exception)。文件以防止它被后面的指令重写。例如:
    RewriteRule ^errors/ - [L]
    

    关于php - 带有 .htaccess 或 PHP 的动态子域页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45155932/

    相关文章:

    javascript - jquery:检测动态生成的输入的变化

    apache - apache/nginx/IIS 有什么区别

    c++ - MAMP 无法启动服务器(mysql、apache)

    java - 调用我的 Web 服务时发生 SSL 协议(protocol)错误

    apache - 使用 URL 重写通过 HTTPS 进行 HTTP 身份验证

    .htaccess - htaccess规则重写.htaccess

    regex - example.com/en/blabla 的行为类似于 example.com/blabla?lang=en

    java - 使用 PHP 将二进制流写入浏览器

    javascript - 需要基于下拉选择的字段

    php - 如何在不知道表单内控件名称的情况下获取表单中的 GET/POST 元素