.htaccess使用%{REQUEST_FILENAME}重定向到子域

时间:2013-09-25 12:59:23

标签: .htaccess

我们有一个安装在root中的在线购物车 - 然后我们决定安装CMS ito root并将购物车移动到子域。

所以我们有

  1. domain.com
  2. shop.domain.com
  3. 我们要实现的目标是重定向以下网址:

    domain.com/product_info.php?products_id=X
    

    要:

    shop.domain.com/product_info.php?products_id=X
    

    X的值也需要改变。

    我读过(如果我理解正确的话)它会与%{REQUEST_FILENAME}有关,到目前为止我们在.htaccess中有这个,这是一个通配符重定向,实际上是将所有内容重定向到相同的文件名,但我们希望X的值也改变。

    RewriteEngine on
    RewriteCond %{HTTP_HOST} ^domain\.co.uk$ [OR]
    RewriteCond %{HTTP_HOST} ^www\.domain\.co.uk$
    RewriteRule ^product_info\.php\/?(.*)$ "http\:\/\/sub.domain\.co.uk\/product_info\.php\?products_id\=1$1" [R=301,L]
    

1 个答案:

答案 0 :(得分:1)

QSA标志会自动传回查询字符串,将此.htaccess放在您网域的根文件夹中:

Options +FollowSymLinks -MultiViews

RewriteEngine On
RewriteBase /

RewriteRule ^product_info\.php$ http://shop.domain.co.uk/product_info.php [R=301,QSA,L]

如果子域也位于域的同一根文件夹中,请使用以下命令:

Options +FollowSymLinks -MultiViews

RewriteEngine On
RewriteBase /

RewriteCond %{HTTP_HOST} ^(www\.)?domain\.co\.uk$ [NC]
RewriteRule ^product_info\.php$ http://shop.domain.co.uk/product_info.php [R=301,QSA,L]

所以基本上可以使用上述任何规则,如果用户访问:

domain.com/product_info.php?products_id=4
domain.com/product_info.php?products_id=3
domain.com/product_info.php?products_id=2
domain.com/product_info.php?products_id=1

它将被重定向到:

shop.domain.com/product_info.php?products_id=4
shop.domain.com/product_info.php?products_id=3
shop.domain.com/product_info.php?products_id=2
shop.domain.com/product_info.php?products_id=1

如果您实际上需要更改ID,那么您可以这样做:

Options +FollowSymLinks -MultiViews

RewriteEngine On
RewriteBase /

RewriteCond %{QUERY_STRING} products_id=([^&]+) [NC]
RewriteRule ^product_info\.php$ http://shop.domain.co.uk/product_info.php?products_id=1%1 [R=301,L]

如果域和子域位于同一根文件夹中,则它的外观如下:

Options +FollowSymLinks -MultiViews

RewriteEngine On
RewriteBase /

RewriteCond %{HTTP_HOST} ^(www\.)?domain\.co\.uk$ [NC]
RewriteCond %{QUERY_STRING} products_id=([^&]+) [NC]
RewriteRule ^product_info\.php$ http://shop.domain.co.uk/product_info.php?products_id=1%1 [R=301,L]

基本上,您需要使用%{QUERY_STRING}从查询字符串中获取数据。

因此,对于上述2条规则中的任何一条,如果用户访问:

domain.com/product_info.php?products_id=4
domain.com/product_info.php?products_id=3
domain.com/product_info.php?products_id=2
domain.com/product_info.php?products_id=1

它将被重定向到:

shop.domain.com/product_info.php?products_id=14
shop.domain.com/product_info.php?products_id=13
shop.domain.com/product_info.php?products_id=12
shop.domain.com/product_info.php?products_id=11