2012-02-29 195 views
0

我有重写规则,它对www以外的子域起作用。我要强制所有URL开始以www,并用PHP处理所有的.html:在.htaccess上重写规则重定向

RewriteEngine On 
RewriteCond %{HTTP_HOST} ^www\. [NC] 
RewriteRule ^catalog\.html$ http://www.domain.com/static.php?staticpage=$1 [L] 

RewriteCond %{HTTP_HOST} !^$ 
RewriteCond %{HTTP_HOST} !^www\. [NC] 
RewriteCond %{HTTPS}s ^on(s)| 
RewriteRule^http%1://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L] 

如果你打http://domain.com/catalog.html,它成功地重定向到http:// www.domain.com/catalog.html(当然没有空间),因为该文件不存在。或者,如果catalog.html存在,它将只显示http:// www.domain.com/catalog.html并呈现实际的.html文件(不含空格)。

我试图实现http://www.domain.com/catalog.html而不显示浏览器上的static.php,无论文件是否存在。 static.php应该处理每个.html页面

在此先感谢!

回答

1

最后 COND正则表达式的%的变量,你需要的条件才能成功所以怎么样:

RewriteCond %{HTTPS}s ^..(s?) 
RewriteRule^  -  [E=PROTO:http%1] 

RewriteCond %{HTTP_HOST} !^$ 
RewriteCond %{HTTP_HOST} !^www\. [NC] 
RewriteRule^   %{ENV:PROTO}://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L] 
0

我假设你要显示的static.php内容当请求.html文件对于。没有static.php显示在浏览器上。

使用时,http://发生外部重定向,导致地址显示在浏览器上。

RewriteCond %{HTTP_HOST} ^www\. [NC] 
RewriteRule (.+)\.html$ static.php?staticpage=$1 [L] 

对于HTTPS你可以遵循什么@TerryE已建议。 但是,我不明白你要重定向到哪个页面https