多域名绑定场景下如何配置.htaccess Rewrite规则满足指定重写需求
最终可实现需求的.htaccess完整配置
RewriteEngine On # 全局强制HTTPS跳转 RewriteCond %{HTTPS} off RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] # ----------------------主域名example.com规则---------------------- # 访问example.com/s、example.com/s/直接返回404 RewriteCond %{HTTP_HOST} ^example\.com$ [NC] RewriteRule ^s/?$ - [R=404,L] # example.com/s/abc 重写为 init.php?type=s&account=abc RewriteCond %{HTTP_HOST} ^example\.com$ [NC] RewriteRule ^s/([0-9a-zA-Z]{1,15})$ init.php?type=s&account=$1 [L] # example.com/api/s/abc 重写为 api.php?type=s&account=abc RewriteCond %{HTTP_HOST} ^example\.com$ [NC] RewriteRule ^api/s/([0-9a-zA-Z]{1,15})$ api.php?type=s&account=$1 [L] # ----------------------停放域名规则---------------------- # 停放域名根路径重写为 init.php?type=d RewriteCond %{HTTP_HOST} !^example\.com$ [NC] RewriteRule ^$ init.php?type=d [L] # 停放域名/api/abc 重写为 api.php?type=d&account=abc RewriteCond %{HTTP_HOST} !^example\.com$ [NC] RewriteRule ^api/([0-9a-zA-Z]{1,15})$ api.php?type=d&account=$1 [L] # 停放域名/abc 重写为 init.php?type=d&account=abc RewriteCond %{HTTP_HOST} !^example\.com$ [NC] RewriteRule ^([0-9a-zA-Z]{1,15})$ init.php?type=d&account=$1 [L] # ----------------------原有通用规则---------------------- RewriteCond %{REQUEST_URI} !^.*\.php$ RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ %{REQUEST_FILENAME}.php [L]
规则注意事项
- 所有规则按从上到下优先级匹配,
L标记表示匹配到当前规则后停止向下匹配,避免规则冲突 [NC]标记表示匹配域名时不区分大小写,适配不同大小写的访问请求- 路径匹配的字符长度限制为1-15位大小写字母+数字,和你原有规则的限制保持一致
- 如果后续需要新增其他停放域名,不需要修改规则,只要不是
example.com的域名都会自动匹配停放域名的规则
内容的提问来源于stack exchange,提问作者Kelvin
相关产品推荐
相关产品推荐

