我有一个重定向情况,即网站是部分动态的,部分生成.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]
我做错了什么?真的很感激它:)
答案 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