php - .htaccess 仅在 GET 参数存在时重定向

标签 php apache .htaccess redirect url-rewriting

我有一个客户有一个旧网站,没有“漂亮”的 URL。所以目前它看起来像这样:

http://www.domain.com/?w=42&a=5&b=3

参数值仅为数字。

现在他们想将旧网站移动到子域,主 (www) 域将成为新网站的所在地(WP 具有 SEO 友好的 URL)。

现在我想做的是重定向所有到达 /?w=<num> 的请求(而且只有那些)到 sub.domain.com/?w=<num> ,以便现有链接(主要来自 Google)被重定向到子域页面,而新页面则通过漂亮的 URL 提供新内容。

我试过这个:

# This works, but redirects the entire www.domain.com
# to sub.domain.com no mather what 
RewriteCond %{HTTP_HOST} ^www\.domain\.com$ [NC]
RewriteRule ^(.*)$ http://sub.domain.com/$1 [R=301,L]

# But this DOESN'T work
RewriteRule   ^/?w(.*)  http://sub.domain.com/?w$1  [R=301,L]

# Also tried to redirect 'by hand', but DIDN'T work either
Redirect 301 /?w=42 http://sub.domain.com/?w=42 

我做错了什么?我到处搜索,但总是以这种建议告终。或者,也许我只是在搜索错误的关键字 ...

谢谢!

最佳答案

您不能匹配重写规则或重定向指令中的查询字符串。您需要匹配 %{QUERY_STRING} 变量。尝试:

RewriteCond %{QUERY_STRING} (^|&)w=[0-9]+(&|$)
RewriteRule ^(.*)$ http://sub.domain.com/$1 [L,R=301]

请注意,查询字符串会自动附加到规则目标的末尾。

关于php - .htaccess 仅在 GET 参数存在时重定向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28903223/

相关文章:

apache - 无法在 AWS EC2 (Ubuntu) apache 系统上使用 SSL Godaddy 验证证书

python - Django、WSGI 和 Apache 的语法错误

php - 在哪里部署 symfony2 应用程序

javascript - 如何覆盖网址?

PHP session 变量检查不起作用

php - Wordpress:从图库中隐藏特色图片缩略图

.htaccess - 将用户从非认证 (non-www) 域重定向到认证 (www)

php - Centos 6.6 CURL 在连接到某些 SSL 站点时返回错误

执行存储过程时 PHP Apache 崩溃

php - 使用 .htaccess 强制 http