【问题标题】:htaccess and no wwwhtaccess 没有 www
【发布时间】:2020-09-15 01:52:40
【问题描述】:

我正在尝试将我的整个网站重定向到非 www

这是我正在使用的 htaccess 代码

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress

# no www
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.akorra\.com$ [NC]
RewriteRule ^.*$ http://akorra.com%{REQUEST_URI} [R=301,L]

任何想法

【问题讨论】:

  • 为什么不让 Wordpress 永久链接处理 WWW 的删除?
  • 当我运行网站时,没有任何反应,www 仍然存在 www.akorra.com
  • @Felix,该文章的答案不适用于此处。那篇文章是针对 ASP.NET 而不是通过 .htaccess
  • 我在上面发布的代码与重复的帖子不同。它有 2 个 rewriterules 语句,使其与众不同
  • 这个呢:stackoverflow.com/questions/234723/… Duplicate?

标签: wordpress .htaccess url-rewriting


【解决方案1】:

我认为你的规则需要在模块标签之间。

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /

# no www
RewriteCond %{HTTP_HOST} ^www\.akorra\.com$ [NC]
RewriteRule ^.*$ http://akorra.com%{REQUEST_URI} [R=301,L]

# BEGIN WordPress
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
# END WordPress

</IfModule>

【讨论】:

  • 这不是真的。 IfModule 仅在未启用 mod_rewrite.c 时确保并非所有内容都给出 500。
【解决方案2】:

这是您需要添加到 .htaccess 的内容

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

但是,如果您使用 Wordpress 作为驱动整个网站的引擎,只需使用您的域名更新永久链接结构和所有内部设置以删除 www。

编辑:

当我写答案时,我认为这是不同的对不起。尝试将您的非 www 规则移到顶部...

# no www
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.akorra\.com$ [NC]
RewriteRule ^.*$ http://akorra.com%{REQUEST_URI} [R=301s,L]

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress

请记住,如果 Wordpress 设置为生成带有 www 的链接,那么即使使用正确的重写规则,也没有什么能阻止它将所有内容恢复为 www。

更多 Wordpress 详细信息:

检查wp/wp-admin/options-general.php中的设置...

  • 一定要删除WordPress address (URL)中的www
  • 一定要删除Blog address (URL)中的www

然后更新wp-admin/options-permalink.php 中的前置链接结构,以便反映更改。

说了这么多,请确保 Wordpress 没有覆盖您的 .htaccess 文件中的新代码。

【讨论】:

    【解决方案3】:

    您好,我认为您需要按如下方式调整脚本以使重写工作:

    Options +FollowSymlinks
    RewriteEngine on
    

    我相信必须包含以下符号链接才能使 url 重写正常工作。

    更多关于 mod_rewrite 的建议在这里:

    http://www.askapache.com/htaccess/mod_rewrite-tips-and-tricks.html

    罗伯

    【讨论】:

      【解决方案4】:
      RewriteEngine On
      RewriteBase /
      
      # no www
      RewriteCond %{HTTP_HOST} ^([^.]+)\.akorra\.com$ [NC]
      RewriteRule ^(.*)$ http://akorra.com/$1 [R=301,L]
      
      # WordPres
      RewriteCond %{REQUEST_URI} ^/[^\.]+[^/]$
      RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1/ [R=301,L]
      RewriteCond %{REQUEST_FILENAME} !-f
      RewriteCond %{REQUEST_FILENAME} !-d
      RewriteRule . /index.php [L]
      

      这应该可以工作

      【讨论】:

        【解决方案5】:

        我建议使用这段代码从您的网站中删除 www:

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

        它更通用。

        在你的例子中最好使用这个:

        <IfModule mod_rewrite.c>
            RewriteEngine On
            RewriteBase /
        
            # no www
            RewriteCond %{HTTPS} !=on
            RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
            RewriteRule ^ http://%1%{REQUEST_URI} [R=301,L]
        
            # BEGIN WordPress
            RewriteCond %{REQUEST_FILENAME} !-f
            RewriteCond %{REQUEST_FILENAME} !-d
            RewriteRule . /index.php [L]
            # END WordPress
        </IfModule>
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-07-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-07-01
          相关资源
          最近更新 更多