【问题标题】:htaccess WWW to no-WWW not workinghtaccess WWW 到 no-WWW 不起作用
【发布时间】:2014-01-03 06:14:13
【问题描述】:

好的,我知道这个问题没有得到很多回答,但我一直在使用很多不同的解决方案,但没有一个对我有用。

我正在尝试在我的 htaccess 中使用 mod_rewrite 将所有 www.domain.com 重定向到 domain.com - 足够标准。

该网站是一个 wordpress 网站,它总是为我工作,使用以下任何一种都没有任何问题

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

或者

RewriteEngine On
RewriteCond %{HTTP_HOST}  ^www.domain.com [nocase]
RewriteRule ^(.*)         http://domain.com/$1 [last,redirect=301]

我也尝试了一些其他的,但似乎没有一个有效!

可能还值得记住以下内容也在 wordpress 的 htaccess 中

RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]

我还检查了 mod_rewrite 是否已启用,它似乎基于此处尝试的方法How to check if mod_rewrite is enabled in php?(Christian Roy 的解决方案)

如果这有帮助,服务器是一个带有 Ubuntu 12.10 的小水滴,托管在数字海洋中?我按照本指南确保已激活 .htaccess https://www.digitalocean.com/community/articles/how-to-use-the-htaccess-file(主要更改是将 AllowOveride 更改为 ALL)

有人有什么想法吗?在这个阶段我迷路了!

谢谢

根据要求更新了 htaccess 文件内容

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

# END WordPress

**使用虚拟主机文件更新**

<VirtualHost *:80>
ServerAdmin webmaster@localhost

DocumentRoot /home/wordpress/public_html

Servername domain.com

ServerAlias www.domain.com

<Directory /home/wordpress/public_html>
    Options Indexes FollowSymLinks MultiViews
    AllowOverride All   
    Order allow,deny
    allow from all
</Directory>

ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory "/usr/lib/cgi-bin">
    AllowOverride None
    Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
    Order allow,deny
    Allow from all
</Directory>

ErrorLog ${APACHE_LOG_DIR}/error.log

# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn

CustomLog ${APACHE_LOG_DIR}/access.log combined

【问题讨论】:

    标签: wordpress apache .htaccess mod-rewrite


    【解决方案1】:

    它会起作用,但你需要确保两件事:

    1. 您将www removal rule 作为常规 WP 规则之前的第一条规则。
    2. 更新 WP permalink settings 以在没有 www 的情况下拥有博客/家庭地址

    【讨论】:

    • 正如我在回复 Phil Perry 时所说的,我已将规则放在文件的最顶部并检查了永久链接以确保它们都是 domain.com ,重新启动 apache 仍然没有!我可能会丢失 htaccess 文件吗?我认为对于 wordpress 位来说这很好,所以这让我感到困惑
    • OK 然后在 firebug 中运行你的请求,看看你是两次还是一次得到 301 响应。
    • 同时尝试在不同的浏览器中运行以避免 301 缓存问题。
    • 据我所见,Firebug 中根本没有 301 响应
    • 那么当您尝试打开http://www.domain.com/ 时,即使在新浏览器中它也保持不变?您是否在 WP 永久链接设置中将所有 URL 更改为非 www?
    【解决方案2】:
    RewriteEngine On
    RewriteCond %{HTTP_HOST}  ^www\. [NC]
    RewriteRule ^(.*)$   http://domain.com/$1 [R=301,L]
    

    应该这样做。如前所述,它可能应该在特定于 WP 的重写之前完成。

    【讨论】:

    • 恐怕还是没用。我已经把它放在我的 htaccess 文件的最顶部,然后重新启动 apache,仍然没有!正如 anubhava 所建议的那样,我还将 wordpress url 和站点 url 设置为 domain.com
    • 我们可以查看您的整个 .htaccess 文件吗?请隐藏任何敏感信息,例如实际域名。当你给它一个 www.domain.com 域时会发生什么?您是否有任何其他 .htaccess 文件(在子目录中)可能会撤消您在此处所做的操作(例如,将 domain.com 转换回 www.domain.com)?
    • 我现在已按要求添加了整个 htaccess 文件,我尝试将 url 更改为 htaccess 文件中的其他内容,但仍然没有效果,就好像它没有在听一样!htaccess文件位于根目录中,但我在子目录中看不到任何其他会覆盖它的文件。
    • 呃,这在Apache服务器上,不是吗? IIS/Windows Server 将忽略 .htaccess 文件。没有被抑制的 500/内部服务器错误?您能说出您的 .htaccess 的哪些部分正在工作,例如 www.domain.com -> domain.com,并缩小错误范围吗?尝试注释掉 # 个部分并一次尝试一个,例如,仅将 www.domain.com 改为 domain.com。顺便说一句,如果您在此处处理其他域名,您可能希望完全指定 www 版本而不仅仅是 www\.. 您需要做的第一件事是证明您正在调用 .htaccess。
    • 是的,它是一个运行 Apache 的基于 Ubuntu 的服务器。我已经证明 .htaccess 文件可以工作,通过取出使漂亮 url 工作的 wordpress 位,当我删除它们时,漂亮的永久链接不再工作,所以据我所知,肯定会调用 .htaccess,并且 mod rewrite 已启用并且似乎也在工作,只是不适用于我的 www 重定向!
    猜你喜欢
    • 2014-07-24
    • 2019-01-28
    • 1970-01-01
    • 1970-01-01
    • 2019-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多