mod_rewrite不断为文件添加.html

时间:2012-03-23 19:35:18

标签: apache .htaccess mod-rewrite redirect

我有一个重定向情况,即网站是部分动态的,部分生成.html文件。

例如,mysite.com/homepage和mysite.com/products/42实际上是静态html文件

其他网址是动态生成的,例如mysite.com/cart

mysite.com和www.mysite.com都指向同一个地方。但是我想将所有流量从mysite.com重定向到www.mysite.com。

我是如此接近,但我遇到了一个问题,Apache在我的网址末尾添加了.html,用于存在静态.html文件的任何内容 - 这是我不想要的。

我想重定向一下:

  http://mysite.com/products/42 

对此:

  http://www.mysite.com/products/42

但是Apache正在这样做(因为42.html是一个真正的html文件):

  http://www.mysite.com/products/42.html

我不希望这样 - 我希望它重定向到www.mysite.com/products/42

以下是我的开始:

RewriteCond %{HTTP_HOST} ^mysite\.com$ [NC]

RewriteRule ^(.*)$ http://www.mysite.com/$1 [R=301,L]

我尝试制作参数和.html可选,但.html仍然在重定向上添加:

RewriteCond %{HTTP_HOST} ^mysite\.com$ [NC]

RewriteRule ^(.*)?(\.html)?$ http://www.mysite.com/$1 [R=301,L]

我做错了什么?真的很感激它:)

2 个答案:

答案 0 :(得分:2)

以下是您在DOCUMENT_ROOT下的.htaccess中需要的代码:

Options +FollowSymLinks -MultiViews
# Turn mod_rewrite on
RewriteEngine On
RewriteBase /

## first add www to your domain for and hide .html extension
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+)\.html [NC]
RewriteRule ^ http://www.mysite.com%1 [R=301,L]

## add www to your domain for other URIs without .html extension
RewriteCond %{HTTP_HOST} ^mysite\.com$ [NC]
RewriteRule ^ http://www.mysite.com%{REQUEST_URI} [R=301,L]

## To internally redirect /dir/foo to /dir/foo.html
RewriteCond %{REQUEST_FILENAME}.html -f [NC]
RewriteRule ^ %{REQUEST_URI}.html [L]

答案 1 :(得分:0)

也许您应该尝试查看apache的mod_negotiation来摆脱.html或任何文件扩展名?

链接:http://httpd.apache.org/docs/2.0/mod/mod_negotiation.html