更新

更新

我想将汽车品牌显示为具有以下结构的子域:

  • 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/

相关内容