如何用.htaccess重写子域名路径,保留子域名与URL参数
.htaccess子域名路径重写解决方案
原配置的问题分析
你之前的配置存在两个核心问题:
- 第一条
RewriteCond %{REQUEST_URI} !^/rezept/是排除以/rezept/开头的请求,和你要匹配/rezept路径的需求完全相反 RewriteRule ^(.*)$ /recipe/detail/$1会把所有请求(除了排除的)都重写,范围太广,不符合只针对/rezept的需求
正确的重写配置
以下配置可以实现你要的效果:将http://dev.domain.com/rezept?recipe_id=2513&language=de重写为http://dev.domain.com/recipe/detail?recipe_id=2513&language=de,同时保留子域名和所有URL参数:
RewriteEngine On RewriteBase / # 仅对dev子域名生效(支持带www的情况) RewriteCond %{HTTP_HOST} ^(www\.)?dev\.domain\.com$ # 匹配请求路径为/rezept(可选匹配末尾带/的情况) RewriteCond %{REQUEST_URI} ^/rezept/?$ # 重写到目标路径,QSA参数自动保留原查询字符串 RewriteRule ^ /recipe/detail [QSA,L]
配置说明
RewriteCond %{HTTP_HOST} ^(www\.)?dev\.domain\.com$:限定规则只作用于dev.domain.com或www.dev.domain.com子域名RewriteCond %{REQUEST_URI} ^/rezept/?$:精准匹配请求路径为/rezept或/rezept/的情况(?表示末尾的/可选)RewriteRule ^ /recipe/detail [QSA,L]:QSA(Query String Append)参数会自动把原URL的查询参数(如recipe_id=2513&language=de)附加到目标路径后;L表示这是最后一条规则,执行后停止后续重写规则的匹配
内容的提问来源于stack exchange,提问作者Bhavin Solanki
相关产品推荐
相关产品推荐

