如何基于子域mod_rewrite url

时间:2014-04-30 10:50:07

标签: apache .htaccess mod-rewrite

我想要实现的是以下apache mod_rewrite:

网址 - >映射到文件:

*.example.com/**/* -> index.php/$1/$2

例如:

portal.example.com/ -> index.php/portal
portal.example.com/agb -> index.php/portal/agb
admin.example.com -> index.php/admin
admin.example.com/my/cool/subfolder -> index.php/admin/my/cool/subfolder

我怎样才能达到这个目标?也许是RewriteCond的东西?

1 个答案:

答案 0 :(得分:2)

首先,确保所有子域都指向同一主机(通配符)。这通常在Apache主机的配置文件中完成。

<VirtualHost *:80>
ServerName example.com
ServerAlias *.example.com
...

然后,您应该获得所需的重定向以使用以下配置:

RewriteEngine on
RewriteCond %{HTTP_HOST} ^(.*)\.example\.com
RewriteRule ^(.*)$ http://example.com/index.php/%1/$1 [L,NC,QSA]

参考: Redirect wildcard subdomains to subdirectory, without changing URL in address bar

更新1:

以下是多个通配符方案的更新。请注意,我更改了最后一行 - 我显式调用了基本URL的index.php,这样$ _SERVER [&#39; PHP_SELF&#39;]的输出应为/index.php/portal/index.html(或根据你的Apache配置的PHP。)

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{HTTP_HOST} ^(.*)\.(.*)\.(.*)$
RewriteRule ^(.*)/?$ http://%2.%3/index.php/%1/$1 [L,NC,QSA]