尝试配置.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。抱歉英语。
答案 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]