麻烦.htaccess重写条件

时间:2016-04-20 15:39:48

标签: apache .htaccess redirect mod-rewrite

我希望我的.htaccess中提到的条件非常好。我想添加一个类似的条件,但是当我这样做时,它会忽略继续使用这个条件。

目前在.htaccess:

RewriteCond %{HTTP_HOST} ^((?!www\.)[^.]+)\.domain\.com$ [NC]
RewriteRule ^item/([^/]+)/([^/]+)/?$ item.php?country=%1&adid=$1 [L,QSA]

想要添加:

RewriteCond %{HTTP_HOST} ^((?!www\.)[^.]+)\.domain\.com$ [NC]
RewriteRule ^redirect/([^/]+)/([^/]+)/?$ redirect.php?country=%1&item=$1 [L,QSA]

我希望pk.domain.com/redirect/242/转到redirect.php并提供以下$ _REQUEST值

  1. 国家= pk
  2. Item = 242
  3. 而不是去redirect.php,它转到item.php。

    其次,我的网站未能通过网站规范化测试。

    对这两个问题的任何帮助都将受到高度赞赏。

1 个答案:

答案 0 :(得分:2)

首先,要将所有请求从http://pk.domain.com永久重定向到http://www.pk.domain.com,您可以在vhost配置文件中使用RedirectMatch

<VirtualHost *:80>
        ServerName pk.domain.com
        RedirectMatch permanent "/(.*)" http://www.pk.domain.com/$1
    ....
    ....
</VirtualHost>
<VirtualHost *:80>
        ServerName www.pk.domain.com
    ....
        ....
</VirtualHost>

一旦您确定所有请求都被重定向到www.pk.domain.com,您应该在DocumentRoot中为www.pk.domain.com创建一个带有以下行的.htaccess文件:

RewriteEngine On

RewriteCond %{HTTP_HOST} ^www\.([a-z]*)\.domain\.com$ [NC]
RewriteRule ^redirect/([0-9]*)/$ redirect.php?country=%1&item=$1 [L,QSA]

在RewriteCond指令中,国家/地区代码将在%1中提取,并将在查询字符串参数country中提供。

在RewriteRule指令中,字符串重定向/“数字”之后的值将在$1中提取,并将在查询字符串参数item中提供

编辑如果您无法编辑vhost配置文件,请将以下内容放在DocumentRoot下的.htaccess文件中,以永久性地将所有请求从http://pk.domain.com重定向到http://www.pk.domain.com:< / p>

RewriteEngine On
RewriteCond %{HTTP_HOST} =pk.domain.com 
RewriteRule (.*) http://www.pk.domain.com/$1 [R=301]