如何从路径查询mod_rewrite?

时间:2013-02-24 11:41:41

标签: apache .htaccess mod-rewrite url-rewriting rewrite

我有网址:

http://olddomain.com/demo?abc=ced&ghi=jkl

我想将其重写为单独的域作为查询:

http://newdomain.com/legacy?url=http%3A%2F%2Folddomain.com%2Fdemo%3Fabc%3Ddef%26ghi%3Djkl

现在我有这样的事情:

RewriteRule (.*) http://newdomain.com/legacy?url=%{HTTP_HOST}%{REQUEST_URI}?%{QUERY_STRING}

问题是输出是:

http://newdomain.com/?url=olddomain.com/demo?abc=def&ghi=jkl

所以没有http://和字符/,?,=和&没有逃脱。除此之外如果原始请求中没有查询会有尾随?,但这可能不是大问题。

1 个答案:

答案 0 :(得分:0)

你可以试试这个:

Options +FollowSymLinks
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} ^/demo [NC]
RewriteRule .*   http://newdomain.com/legacy?url=http://%{HTTP_HOST}%{REQUEST_URI}  [L,R,QSA]

重定向

http://olddomain.com/demo?abc=ced

http://newdomain.com/legacy?url=http://olddomain.com/demo?abc=ced

假设所有字符串都是固定的,但传入的查询除外。

由于对我的评论没有回应,这个答案假定:

    附加到替换URL(在问题中)的查询中的
  • &ghi=jkl也是传入URL中查询的一部分

  • http://example.com/http://newdomain.com/相同。