【问题标题】:.htaccess rewrite a subdomain with a variable.htaccess 用变量重写子域
【发布时间】:2022-01-30 06:28:22
【问题描述】:

这是否可能指向特定变量的子域?

http://whatever.example.com 指向http://example.com/file.php?var=1

http://whatever1.example.com 指向http://example.com/file.php?var=2

尝试了下面推荐的答案 - 代码有效但没有 css 样式:

RewriteEngine on

RewriteCond %{HTTP_HOST} ^(?:www\.)?whatever\.example\.com$
RewriteRule ^ /file.php?var=1 [L,QSA]

RewriteCond %{HTTP_HOST} ^(?:www\.)?whatever1\.example\.com$
RewriteRule ^ /file.php?var=2 [L,QSA]

RewriteEngine on

RewriteCond %{HTTP_HOST} !^www\.example\.com$

RewriteCond %{HTTP_HOST} ^(?:www\.)?([^.]+)\.example\.com$

RewriteRule ^ /file.php?var=%1 [L,QSA]

通过添加 <base href=""/>in 标头并为我的 css 创建一个名为 cssfolder 的文件夹来使其正常工作,因为根文件夹无法正常工作。不知道为什么?

<base href="../" /> "not working"

<base href="/" /> "not working"

<base href="./" /> "not working"

<base href="/cssfolder/" /> "this work"

【问题讨论】:

    标签: .htaccess variables url-rewriting


    【解决方案1】:

    当然可以。但是你需要区分一些事情:

    URL(“子域”)中的实际主机名不是RewriteRules 模式内部匹配的路径的一部分。您需要使用RewriteCond 来访问该信息:

    RewriteEngine on
    
    RewriteCond %{HTTP_HOST} ^(?:www\.)?whatever\.example\.com$
    RewriteRule ^ /file.php?var=1 [L,QSA]
    
    RewriteCond %{HTTP_HOST} ^(?:www\.)?whatever1\.example\.com$
    RewriteRule ^ /file.php?var=2 [L,QSA]
    

    一个典型的变体是交出一个实际的名字而不是一个数值。这里的 GET 变量将变为 v=whateverv=whatever1

    RewriteEngine on
    RewriteCond %{HTTP_HOST} !^www\.example\.com$
    RewriteCond %{HTTP_HOST} ^(?:www\.)?([^.]+)\.example\.com$
    RewriteRule ^ /file.php?var=%1 [L,QSA]
    

    这假设所有主机/子域都由同一个 http 服务器提供服务,当然,因为它是一个内部重写。

    一般来说,我建议您查看要使用的工具的文档。该文档作为典型的开源软件,质量上乘,并附有很好的示例:https://httpd.apache.org/docs/current/mod/mod_rewrite.html

    【讨论】:

    • 试过了,但是css样式没有加载
    • @Mel 很可能就是这样。很可能是因为无法从 /file.php?var=... 请求您的 css 文件。这是您在问题中从未提及的一个方面,这就是为什么无法在答案中考虑它。
    • 如果我输入这个到地址栏 example.com/file.php?var=1234 ,我的 css 工作
    • 您正在查看缓存的 css 内容吗?检查您的浏览器网络控制台,始终使用新的匿名浏览器窗口进行测试。
    • 您肯定会收到有关该问题的帮助。但为此,您需要描述问题。我们无法以某种方式猜测。对该 CSS 内容的实际引用是什么?应该映射到的内部资源是什么?在请求该 css 并且您已实施上述规则时,您实际上从 http 服务器得到什么响应?
    猜你喜欢
    • 2011-05-15
    • 2011-02-04
    • 2014-03-17
    • 1970-01-01
    • 1970-01-01
    • 2010-12-29
    • 2011-05-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多