RewriteEngine on
Options -Indexes
DirectoryIndex index.php
RewriteBase /
RewriteRule ^user/([a-zA-Z]+)/([a-zA-Z]+)(/)?$ index.php?controller=main&function=$1&arguments=$2 [NC,L]
我可以mysite.com/one/two
去main->one(two)
我想以相同的方式路由子域请求。
我该如何设置这样的规则来api.mysite.com
实现以下效果?
controller=api&function=$1&arguments=$2 [NC,L]
(允许我访问 api.mysite.com/one/two 来点击 api->one(two))
答案1
它会是这样的
RewriteCond %{HTTP_HOST} ^(.*)\.mysite\.com
RewriteRule ^user/([a-zA-Z]+)/([a-zA-Z]+)(/)?$ \
index.php?controller=%1&function=$1&arguments=$2 [NC,L]
mod_rewrite 允许使用 %N,其中 N 为 1..9,以匹配前一个括号中的模式RewriteCond
,因此%1
用于替换api
rewriteCond 中的域前缀
答案2
我最终发现,创建一个新的虚拟主机并将其指向一个新的、特定于 api 的 htaccess 文件更简单:
ServerName api.mysite.com
DocumentRoot /var/www/host/mysite.com/html
AccessFileName .api.htaccess # <-- this did the trick