我想将汽车品牌显示为具有以下结构的子域:
- toyota.domain.com——主要品牌页面
- toyota.domain.com/buy/toyota/avensis/ - 产品页面
我正在尝试使用以下 apache mod_rewrite 规则序列,但它似乎无法正常工作:
RewriteEngine on
RewriteBase /
RewriteCond %{HTTP_HOST} ^(?!www\.|mail)(.+)\.domain\.com$
RewriteRule ^buy/(.+)/([^/]+)(?:/)?$ catalog_model.php?make=%1&model=$2 [NC,L]
RewriteCond %{HTTP_HOST} ^(?!www\.|mail)(.+)\.domain\.com
RewriteRule ^(.+)$ catalog_make.php?make=%1 [NC,L]
当您打开 toyota.domain.com 时 - 它运行正常,但是当您尝试访问 toyota.domain.com/buy/toyota/avensis/ 时,它仍会尝试打开 catalog_make.php 而不是 catalog_model.php。
在这种情况下正确的解决方案是什么?
=====================================================
更新
即使我将第一条规则改为
RewriteCond %{HTTP_HOST} ^(.+)\.domain.com$
RewriteRule ^buy/toyota/avensis/$ catalog_model\.php?make=$1&model=$2 [NC,L]
并打开http://toyota.domain.com/buy/toyota/avensis/
Apache 仍会跳过此规则并处理 catalog_make.php
=====================================================
更新2
即使我把规则改成
RewriteCond %{HTTP_HOST} ^(.+)\.domain\.com$
RewriteRule ^(toyota)/$ catalog_model\.php?make=$1 [NC,L]
并打开http://toyota.domain.com/toyota/ - 它仍然不起作用。
答案1
我已经让它发挥作用了——只是一个简单的改变
RewriteCond %{HTTP_HOST} ^(.+)\.domain.\com$
RewriteRule ^buy/(.+)/([^/]+)(?:/)?$ catalog_model.php?make=$1&model=$2 [NC,L]
RewriteCond %{HTTP_HOST} ^(?!www\.|mail)(.+)\.domain.\com$
RewriteRule ^$ catalog_make.php?make=%1 [NC,L]
已移除(.+)在第二条规则中。
答案2
尝试:
RewriteCond %{HTTP_HOST} ^([^.]*)\.domain\.com$
RewriteRule ^buy/([^/]*/)?([^/]+)/?$ catalog_model.php?make=%1&model=$2 [NC,L]
应同时应对:
toyota.domain.com/buy/avensis
toyota.domain.com/buy/avensis/
toyota.domain.com/buy/toyota/avensis
toyota.domain.com/buy/toyota/avensis/