url重写后错误的路径

时间:2014-08-07 09:29:28

标签: php .htaccess url-rewriting

我在ht access中有以下代码

RewriteEngine On
RewriteCond %{HTTP_HOST} ^outsource.example.com/$
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule (.*) http://example.com/outsource/$1 [R=301,L] 

RewriteCond %{HTTP_HOST} ^example.com$
RewriteRule (.*) http://www.example.com/$1 [R=301,L] 

问题在于链接http://outsource.example.com/packages.php

未重定向到http://www.example.com/packages.php

我希望在其他链接上使用相同的重定向

1 个答案:

答案 0 :(得分:1)

考虑到:

RewriteEngine On
RewriteCond %{HTTP_HOST} ^outsource.example.com
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule (.*) http://example.com/outsource/$1 [R=301,L] 

RewriteCond %{HTTP_HOST} ^example.com
RewriteRule (.*) http://www.example.com/$1 [R=301,L] 

将导致以下结果:

 > GET http://outsource.example.com/packages.php 
 < 301 http://example.com/outsource/packages.php 
 > GET http://example.com/outsource/packages.php 
 < 301 http://www.example.com/outsource/packages.php 
 > GET http://www.example.com/outsource/packages.php 
 < 404 - since your file seem to be at /packages.php

您应该减少重定向次数并更改路径:

RewriteEngine On
RewriteCond %{HTTP_HOST} ^outsource.example.com
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule (.*) http://www.example.com/$1 [R=301,L] 

RewriteCond %{HTTP_HOST} ^example.com
RewriteRule (.*) http://www.example.com/$1 [R=301,L] 

这将导致:

 > GET http://outsource.example.com/packages.php 
 < 301 http://www.example.com/packages.php 
 > GET http://www.example.com/packages.php 
 < 200 - and the content of your packages.php