我的网站设置如下:
RewriteCond %{HTTP_HOST} !^www\.example\.com
RewriteCond %{HTTP_HOST} ([^.]+)\.example\.com [NC]
RewriteRule ^/?$ /user/profile.php?name=%1 [L]
这样做的目的是,如果用户访问:test.example.com
,它将显示文件的内容:example.com/user/profile.php?name=test
。如果有人访问lol.example.com
,它将显示页面:example.com/user/profile.php?name=lol
但 URL 将与子域名保持不变,如test.example.com
和lol.example.com
。
这部分正在工作。
问题:
如果我转到test.example.com/login
,它将显示我的域根文件。我该如何让它显示/user
文件夹中的内容?
例如:
test.example.com/login
会显示example.com/user/login
,test.example.com/register
会显示,example.com/user/register
但是 URL 会与子域名保持相同?test.example.com/pathtofile
应该获取 的内容example.com/user/pathtofile
。“pathtofile” 应该是动态的。我只希望在文件夹中查找路径/user
,而不是根文件夹中查找路径。
答案1
如果有人访问
lol.example.com
,它将显示页面:example.com/user/profile.php?name=lol
。
严格来说,它会显示页面:(lol.example.com/user/profile.php?name=lol
子域名未被删除)。但由于(我假设)所有子域名和主域名都指向文件系统上的同一位置,因此它可以工作。
test.example.com/pathtofile
应该得到的内容example.com/user/pathtofile
您的原始指令仅重写了对文档根目录 ( ) 的请求test.example.com/
。要重写/pathtofile
,您可以在 中的上述内容后添加另一个规则块.htaccess
。例如:
RewriteCond %{HTTP_HOST} !^www\.example\.com
RewriteCond %{HTTP_HOST} [^.]+\.example\.com [NC]
RewriteCond %{REQUEST_URI} ^/([^/]+)$
RewriteRule !^user/ /user/%1 [L]
这将重写所有尚未启动/user/
且仅由单个(非零长度)路径段组成的请求,如您的示例所示(例如/pathtofile
和 不是/path/to/file
),并重写为/user/pathtofile
。
更新:如果您已ErrorDocument
定义,则需要尽早在您的 `.htaccess 文件中设置例外,以防止重写错误文档的子请求。例如:
RewriteRule ^404\.php$ - [L]