.htaccess rewriterule将我重定向到另一个站点 - 为什么

时间:2013-05-17 06:50:13

标签: php .htaccess url-rewriting

我正在尝试在网址serve_each_drive.php

下的drive_for_london/?pid=12中完成一些工作

这是我的.htaccess

Options +FollowSymLinks -MultiViews
RewriteEngine On
RewriteBase /
RewriteRule ^drive_for_(.*)/$ http://web228.sydney.webhoster.ag/soputnik/serve_each_drive.php [L]

我想保留网址drive_for_london/?pid=12并在后台完成工作。但上面的规则是将我重定向到serve_each_drive.php。网址正在变为:

http://web228.sydney.webhoster.ag/soputnik/serve_each_drive.php

为什么呢?请帮忙

1 个答案:

答案 0 :(得分:1)

是的,这是正确的mod_rewrite行为,如果目标中有完整的URL,目标URL将从外部重定向(因此也会在浏览器中更改)。由于您的目标网址以http://开头,因此会发生此重定向。

要防止此行为,您需要:

  1. 确保您使用的是不带域名的网址(网络服务器内部)
  2. 确保不要使用R标志(您已经在使用它)
  3. 所以用这个改变你的代码:

    Options +FollowSymLinks -MultiViews
    # Turn mod_rewrite on
    RewriteEngine On
    RewriteBase /
    
    RewriteCond %{QUERY_STRING} ^pid=.+ [NC]
    RewriteRule ^drive_for_(.*?)/$ /soputnik/serve_each_drive.php [L,NC]
    

    另请注意,上面的代码假定您网页上的网址为:http://web228.sydney.webhoster.ag/drive_for_london/?pid=12,并且会在内部转发到:http://web228.sydney.webhoster.ag/soputnik/serve_each_drive.php?pid=12