.htaccess 用变量重写子域

.htaccess rewrite a subdomain with a variable

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

http://whatever.example.com point to http://example.com/file.php?var=1

http://whatever1.example.com point to 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]

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

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

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

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

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

当然可以。但你需要区分几件事:

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]

当然,这假定所有 hosts/subdomains 都由同一个 http 服务器提供服务,因为它是 内部 重写。

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