Mod_Rewrite删除WWW时的奇怪重定向行为

时间:2010-06-01 10:36:25

标签: apache mod-rewrite url-rewriting

我正在尝试在我的项目中使用一些规则从www的开头删除URL,但我遇到了一些问题。

我的服务器结构是:

domain.com/beta_folder
domain.com/beta_folder/page+type
domain.com/beta_folder/page+type/content+name
domain.com/beta_folder/page+type/content+name/edit
domain.com/beta_folder/page+type/content+name/etc.

domain.com/beta_folder/.htaccess //here is where my htaccess is

beta_folder是站点文件夹,content+name是内容变量,用于从数据库中检索页面。

该网站完善了这条规则

RewriteEngine On
RewriteRule ^(page\+type/)([a-zA-Z0-9_+-]+)[/]?$ page_folder/page.php?varname=$2

我的目的是删除www,因此我添加了此规则,但效果不佳

RewriteEngine On
RewriteCond %{HTTP_HOST} ^www.domain.com$ [NC]
RewriteRule ^(.*)$ http://domain.com$1 [R=301,L]
RewriteRule ^(page\+type/)([a-zA-Z0-9_+-]+)[/]?$ page_folder/page.php?varname=$2

如果我在我的域名前面加www,我的问题就出现了:

这是有效的

http://domain.com/beta_folder/page+type/content+name

如果我写

http://www.domain.com/beta_folder/page+type/content+name

重写规则重定向我

http://www.domain.compage+type/content+name

如果我删除www规则,问题仍然有效

不幸的是,我无法对我的域进行公开测试

基本上,如果我写

 http://www.domain.com/beta_folder

规则将我发送给

 http://domain.com/

我找到解决问题的唯一方法是编写我的网站所在的文件夹,所以:

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

我没有理解为什么我应该写这个文件夹,因为我的重写cond会影响 http://www.domain.com/folder_name/contents而非http://www.domain.com/contents

为什么folder_name从重写中丢失了?

1 个答案:

答案 0 :(得分:0)

试试这个,略微不同的规则示例:

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

如果这不能解决您的问题,请大声喊出来。