我之前已经知道类似的事情,但我找到的解决方案似乎都没有解决。到目前为止,就mod_rewrite而言,我是一名专家,所以如果我遗漏了一些明显的东西,我会道歉。
我试图将子域名无形地重定向到子目录中的index.php
文件;此文件将子域的值作为查询字符串的一部分,这是正常工作。
我遇到的问题是现在此子目录中的所有被重定向到index.php
文件,我不想发生这种情况。
这就是我到目前为止:
RewriteEngine On
RewriteBase /
# User dashboards
RewriteCond %{HTTP_HOST} ^(.*)\.example\.com [NC]
RewriteRule ^.*$ app/index.php?user=%1 [L,NC,QSA]
我正在寻找的情况是http://subdomain.example.com/
会导致/app/index.php?user=subdomain
,但http://subdomain.example.com/assets/stylesheet.css
会转到/app/assets/stylesheet.css
。
提前致谢!
答案 0 :(得分:0)
添加第二条规则,将资产重定向到app / assets:
RewriteCond %{HTTP_HOST} ^(.*)\.example\.com [NC]
RewriteCond %{REQUEST_URI} !\.(css|js|png|jpg|gif)$ [NC]
RewriteRule ^.*$ app/index.php?user=%1 [L,QSA]
RewriteRule ^assets/(.*)$ app/assets/$1 [L,QSA]
或直接从app加载所有css / js / images:
RewriteCond %{HTTP_HOST} ^(.*)\.example\.com [NC]
RewriteRule ^.*\.(css|js|png|jpg|gif)$ app/$0 [NC, QSA]
RewriteRule ^.*$ app/index.php?user=%1 [L,QSA]
编辑:抱歉,我之前没有测试过,所以有工作示例:
RewriteRule ^assets/(.*)$ app/assets/$1 [L,QSA]
RewriteCond %{HTTP_HOST} ^(.*)\.example\.com [NC]
RewriteRule !^app/assets/ app/index.php?user=%1 [L,QSA]
答案 1 :(得分:0)
如果我理解你的榜样,你可以这样做:
将example.com重定向到www.example.com以避免出现“空”子域
在内部将每个根子域(www除外)重写为/app/index.php?user=subdomain
使用“app”前缀
由此代码代表
RewriteEngine on
# redirects example.com to www.example.com to avoid having "empty" subdomain
RewriteCond %{HTTP_HOST} ^example.com$
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]
# internally rewrites every root subdomains (except www) to /app/index.php?user=subdomain
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteCond %{HTTP_HOST} ^([^.]+)\. [NC]
RewriteRule ^/?$ /app/index.php?user=%1 [L,NC,QSA]
# internally rewrites other things with "app" prefix
RewriteCond %{THE_REQUEST} !app/
RewriteRule ^/?(.+)$ /app/$1 [L,NC,QSA]
编辑:正如您在下面的评论中所述,以下是如何管理www
子域名
RewriteEngine on
# redirects example.com to www.example.com to avoid having "empty" subdomain
RewriteCond %{HTTP_HOST} ^example.com$
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]
# internally redirects www subdomain root to /site/index.php
RewriteCond %{HTTP_HOST} ^www\. [NC]
RewriteRule ^/?$ /site/index.php [L]
# internally rewrites every other root subdomains to /app/index.php?user=subdomain
RewriteCond %{HTTP_HOST} ^([^.]+)\. [NC]
RewriteRule ^/?$ /app/index.php?user=%1 [L,NC,QSA]
# internally rewrites other things with "app" prefix
RewriteCond %{THE_REQUEST} !app/
RewriteRule ^/?(.+)$ /app/$1 [L,NC,QSA]