htaccess内部页面重定向问题

时间:2019-02-06 16:06:43

标签: php apache .htaccess

当我键入http://mywebsite.com时,服务器成功重定向到http://www.mywebsite.com,但是当我键入http://mywebsite.com/page.php时,服务器重定向到http://www.mywebsite.com而不是http://www.mywebsite.com/page.php

我的服务器是Apache,我使用这些行将.htaccess中的非www重定向到www

RewriteEngine On
RewriteCond %{HTTP_HOST} !^(.*)\.mywebsite\.com$ [NC]
RewriteRule ^(.*)$ https://www.mywebsite.com/$1 [R=301,L]

谢谢

4 个答案:

答案 0 :(得分:2)

我建议以下内容:

RewriteEngine On
RewriteCond %{HTTP_HOST} ^mywebsite\.com [NC]
RewriteRule ^(.*)$ https://www.mywebsite.com/$1 [R=301,L]

我认为您的条件太严格了。您太早结束了($)。

答案 1 :(得分:1)

如果您不希望在网址的开头添加www,我宁愿使用它:

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

答案 2 :(得分:1)

像这样尝试:

# Redirect non-www to www
  RewriteCond %{HTTP_HOST} !^www\.
  RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]

或重定向ot HTTPS:

# HTTP OVER SSL
  RewriteCond %{HTTPS} !on
  RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

答案 3 :(得分:1)

我不建议将用户重定向到.htaccess中的。对于可能来自非http端口(例如80)的访问者,您应该在虚拟主机的配置文件中执行此操作(如果可能),请使用临时重定向,或者在适当情况下使用永久重定向。

它可能看起来像这样:

<VirtualHost *:80>
   ServerName mywebsite.com
   ServerAlias www.mywebsite.com
   DocumentRoot "/var/www/mywebsite.com"
   Redirect / https://www.mywebsite.com/
</VirtualHost>

<VirtualHost *:443>
   ServerName mywebsite.com
   DocumentRoot "/var/www/mywebsite.com"
   Redirect / https://www.mywebsite.com/
   ... SSL stuff
   .... your https config for mywebsite here, with SSLCertificate, I believe you need a separate one for without www, to redirect to www.
</VirtualHost>

<VirtualHost *:443>
   ServerName www.mywebsite.com
   DocumentRoot "/var/www/mywebsite.com"
   SSL STUFF****
</VirtualHost>

然后在.htaccess中,您根本不需要任何重写。

我认为其他答案的问题是,您正在重写文件的位置,而该文件的格式应为%{DOCUMENT_ROOT}%{REQUEST_URI},因此您可能有一个错误处理程序将您退回到主页。因此,请检查您的错误日志和访问日志。