【问题标题】:Redirect with www not working使用 www 重定向不起作用
【发布时间】:2013-11-19 14:10:41
【问题描述】:

我最近从共享主机切换到 VPS。 一切正常,我可以访问我的所有域。

但我似乎有 1 个问题: 过去所有非 www 的 url 都被重定向到带有 www 的 url。

我使用以下 htaccess.txt 代码完成此操作:

RewriteEngine on
RewriteCond %{HTTP_HOST} !^www\.tx3\.be$ [NC]
RewriteRule ^(.*)$ http://www.tx3.be/$1 [R=301,L]

但我当时正在使用带有以下代码的新 htaccess:

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

但两者都无法重定向我的非 www 域。

当我访问我的非 www 域时,我会看到以下页面: “Apache 运行正常”

我尝试使用 DirectAdmin 重定向将非 www 域重定向到带有 www 的域,但这也不起作用。

也许我完全搞错了,而且一开始这不是 htaccess 问题。

我是否忘记了服务器设置中的某些内容? 我不知道,一切看起来都井井有条。 (我确实仔细检查了我的 DNS 设置,它们似乎没问题)

有人知道我接下来应该做什么吗?

【问题讨论】:

  • 您是否验证了 .htaccess 正在被应用?在服务器级别或<Directory> 配置中,您必须具有适当的AllowOverride 指令才能解析.htaccess。共享主机会为您完成此操作,但 VPS 可能会要求您自己完成。
  • 要测试 HTTPS 是否关闭,您可以使用简单的东西,例如 RewriteCond %{HTTPS} !on
  • @MichaelBerkowski,是的,htaccess 正在工作,因为其中还有其他规则可以应用;)
  • 然后通过一次禁用一个条件进行调试。
  • 我做了,两个域,有 www 和没有 www 仍然可以访问...

标签: php apache .htaccess mod-rewrite redirect


【解决方案1】:

请试试这个

Rewriteengine on

RewriteCond %{HTTPS} on

RewriteCond %{HTTP_HOST} !^www\.(.*)$ [NC]

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

【讨论】:

  • 对不起,我忘记在顶部写“rewriteengine on”请添加然后尝试
  • 我看到了,但我在我的代码中添加了它......仍然无法正常工作。我认为由于服务器配置,这两个域名都可以访问...
  • 我已经检查了非 www 和 www 的域重定向到 www.tx3.be ,请清除缓存或检查其他浏览器。
  • @gelleby 可能是 DNS 问题,你能 ping 你的服务器并获得正确的 IP 吗?
  • @MohammadAbuShady,是的,我可以 ping 一切并始终获得正确的 IP
【解决方案2】:

如果使用 windows 下载腻子(ssh 客户端)给它你的服务器 ip 地址选择类型为 ssh 并点击打开。

它会要求你输入用户名和密码,给它你的 root 用户名和密码(应该由 vps 托管公司提供)

现在 cd 到您的 apache 配置文件夹(如果您使用基于 redhat 的设置,我只熟悉基于 debian 的设置,您可能需要搜索正确的路径)/etc/apache2/sites-available

现在查看目录列表 (ls),它会向您显示可用的 apache 配置,您可能会在其中拥有类似 www.tx3.be 的内容。通过执行 pico 编辑我建议使用 pico 或 nano 的文件

这是我服务器上的一个示例

root@hinch:/home/hinch# cd /etc/apache2/sites-available
root@hinch:/etc/apache2/sites-available# ls
default                   
default-ssl               
root@hinch:/etc/apache2/sites-available# pico default

现在你在你的 apache 配置文件中你会看到类似这样的东西

NameVirtualHost *:80
<VirtualHost *:80>
        ServerAdmin root@yourdomain.com

        DocumentRoot /var/www/
        <Directory />
                Options FollowSymLinks
                AllowOverride None
        </Directory>
        <Directory /var/www/>
                DirectoryIndex index.html index.cgi index.pl index.php index.xhtml index.htm default.htm default.html default.php
                Options Indexes FollowSymLinks MultiViews
                AllowOverride None
                Order allow,deny
                allow from all
        </Directory>    
        ErrorLog /var/log/apache2/error.log
        # Possible values include: debug, info, notice, warn, error, crit,
        # alert, emerg.
        LogLevel warn
        CustomLog /var/log/apache2/access.log combined
</VirtualHost>

ServerAdmin这一行之后添加以下内容

ServerAlias tx3.be
ServerAlias www.tx3.be

保存文件并重启apache

service apache2 restartservice httpd restart

从您的 .htaccess 中删除所有重定向代码,并确保您同时拥有 www。 dns A 记录和@.指向您的服务器 IP 地址的记录。现在,无论用户访问哪个版本的域,他们都会看到您的网站。

【讨论】:

  • 感谢您的解释,难道是我的提供商有 DNS 问题吗?也许这就是tx3.be 最终解决的原因?
  • 我知道,但我仍然得到那个奇怪的页面“Apache 运行正常”而没有 www
  • 那是因为 apache 不知道如何处理没有 www 的域。在它的前面,所以它被默认的 apache 域规则处理。这就是为什么您需要为您的域配置 apache 以接受没有 www 的域。因此在您的 apache 配置中使用 ServerAlias 行。
  • 我收到一个错误:启动 httpd:/etc/httpd/conf/httpd.conf 第 23 行的语法错误:ServerAlias only used in
  • 您将其添加到 httpd 配置而不是站点配置。 httpd.conf 纯粹用于服务器设置
猜你喜欢
  • 2021-09-16
  • 2023-04-02
  • 2014-02-04
  • 2019-11-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多