URL使用变量将带有变量的子域重写为常规域

时间:2015-06-29 23:37:02

标签: .htaccess url url-rewriting rewrite

我正在尝试通过此URL重写获得一些帮助。我已经阅读了有关如何完成所有这些的多个教程和文档页面,但对我来说没有任何意义。我也不懂正则表达式,所以这也无济于事。我有一个半工作的代码,只需要帮助让它正常工作。

我需要:http://subdomain.domain.com?dl=2

重定向到http://domain.com/subdomain.php?dl=2

我的代码是

RewriteEngine on
RewriteCond %{HTTP_HOST} ^subdomain.example\.com$ [NC]
RewriteCond %{REQUEST_URI} !page.php
RewriteRule ^(.+/)?([^/]*)$ page.php?dl=$2 [QSA,L,NC]

哪个发送变量但无法找出子域部分。如果有人能帮助我,我们将不胜感激。

1 个答案:

答案 0 :(得分:0)

您需要检查QUERY_STRING RewriteRule是否包含它。此外,您的规则未使用重定向标记R

RewriteEngine on

# First, check for the subdomain
RewriteCond %{HTTP_HOST} ^subdomain.domain.com$ [NC]

# Then, check the query string - it should match digits (\d+)
RewriteCond %{QUERY_STRING} ^dl=\d+ [NC]

# Check if we are not at subdomain.php
# (This is redundant, but leaving it here in case you really need it)
RewriteCond %{REQUEST_URI} !^/subdomain.php

# If all the above conditions are true, match a root-request
# and redirect to domain.com/subdomain.php with the query string
# Note: You don't need to actually specify the query string
#       in the destination URI - Apache will automatically
#       hand it over upon redirect (using the R flag).
#       The only time this is not the case is when you
#       either add the QSD flag, or append the destination
#       URI with a question mark.
RewriteRule ^$ http://domain.com/subdomain.php [R=302,L]

以上内容会将http://subdomain.domain.com/?dl=2重定向到http://domain.com/subdomain.php?dl=2。如果您希望将重定向设为永久性并由浏览器和搜索引擎进行缓存,请将302更改为301