2个域之间的URL映射

时间:2018-11-06 23:45:58

标签: apache .htaccess url-mapping

我们有3个客户的在线服务:汽车配件,CarExamples和Cars&More。这是网址结构:

  • example.com/autoparts
  • example.com/carexamples
  • example.com/carsandmore

其中一位客户(CarExamples)想要使用他们自己的域(carexamples.com),但它必须加载example.com/carexamples的内容,当然总是使用原始域。

这意味着:

  • carexamples.com应该加载example.com/carexamples
  • carexamples.com/about应该加载example.com/carexamples/about
  • carexamples.com/categories/trucks?p=1应该加载example.com/carexamples/categories/trucks?p=1

我们正在使用LAMP环境(PHP v5.6)。域example.com位于我们服务器的/www/example/html中。

此问题的当前状态为:

  1. 在域的DNS管理器控制台中创建一个A记录,该记录指向托管example.com所在的同一服务器。

  2. 为自定义域添加虚拟主机

    <VirtualHost servername:80>
        ServerName carexamples.com
        ServerAlias www.carexamples.com
        DocumentRoot /www/example/html
    </VirtualHost>
    

但这会在打开carexamples.com时加载example.com的相同内容

值得注意的是,/www/example/html/carexamples不是目录,它是对/www/example/html/store.php?store=carexamples的重写

Shopify可以执行类似的操作:https://help.shopify.com/en/manual/domains/add-a-domain/using-existing-domains/connecting-domains#set-up-your-existing-domain-to-connect-to-shopify可能可以作为对此问题的参考。

这些是.htaccess文件中现有的重写规则:

# stores
RewriteRule ^([0-9a-zA-Z-]{2,50})$ /store.php?store=$1 [QSA,L]

# stores > categories
RewriteRule ^([0-9a-zA-Z-]{2,50})/([0-9a-zA-Z-]{1,50})$ /store.cat.php?store=$1&cat=$2 [QSA,L]

# stores > categories > items
RewriteRule ^([0-9a-zA-Z-]{2,50})/([0-9a-zA-Z-]{1,50})/([0-9]+)/([0-9a-zA-Z-]{1,100})$ /store.cat.php?store=$1&cat=$2&id_item=$3&item=$4 [QSA,L]

2 个答案:

答案 0 :(得分:1)

在网站根目录.htaccess中拥有类似的规则:

RewriteEngine On

# per domain rewrite
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteCond %{HTTP_HOST} !^(?:www\.)?example\. [NC]
RewriteCond %{HTTP_HOST}:%{REQUEST_URI} ^(?:www\.)?([^.]+)[^:]*:(?!/\1/) [NC]
RewriteRule ^ %1%{REQUEST_URI} [L]

# stores
RewriteRule ^([\w-]{2,50})/?$ store.php?store=$1 [QSA,L]

# stores > categories
RewriteRule ^([\w-]{2,50})/([\w-]{1,50})/?$ store.cat.php?store=$1&cat=$2 [QSA,L]

# stores > categories > items
RewriteRule ^([\w-]{2,50})/([\w-]{1,50})/(\d+)/([\w-]{1,100})/?$ store.cat.php?store=$1&cat=$2&id_item=$3&item=$4 [QSA,L]

答案 1 :(得分:0)

如果我正确理解了您的信息(纠正我或澄清这是否不是您想要的内容)

每个条目都需要一个单独的vHost ..您正在查看错误的目录-这是一个示例-尽管它应该是不言自明的..只需将/carexamples添加到{{1} }

DocumentRoot