mod_rewrite重定向www域的问题

时间:2015-01-13 14:23:22

标签: apache .htaccess mod-rewrite redirect

尝试配置.htaccess mod_rewrite规则以重定向页面 http://www.example.com/page1/http://www.example.com/page2/

有价值的.htaccess规则是:

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

RewriteRule ^([^/]*)/$ index.php?s_page=$1 [L]

如果我发送获取查询,此规则的工作正确:“GET http://example.com/page1/”。

但是,如果我尝试为域www.example.com编写附加规则,例如:

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

重定向无效。如果我尝试发送查询:“GET http://www.example.com/page1/”,那么,首先,浏览器发送第一个查询“GET http://www.example.com/page1/”,服务器的回答状态为“301 Moved Permanently”(查询html页面)由服务器作为第一个查询的答案)。然后,浏览器发送第二个查询“GET http://www.example.com/page2/”(并且服务器再次发送html页面)。 我需要条件和规则类似于查询域名使用www和查询而不使用域名的www前缀。

PS。抱歉英语。

1 个答案:

答案 0 :(得分:3)

您不需要www域的新规则。只需调整正则表达式:

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

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^/]+)/?$ index.php?s_page=$1 [L,QSA]