【问题标题】:Conflicting HTAccess files - rewrites and 301s not working for wordpress sites冲突的 HTAccess 文件 - 重写和 301 不适用于 wordpress 网站
【发布时间】:2015-05-23 21:10:24
【问题描述】:

我在一台服务器上托管了两个站点。子目录中的旧文件和根文件夹中的新文件。

/var/www/ 中的 blog.domain.com - 当前站点

blog.domain.com/blog in /var/www/blog/ - 旧网站

blog.domain.com/blog 是旧网站,出于各种原因,我们需要重定向到新网站。

我在 /var/wwww/blog/ 文件夹中的 htaccess 中添加了 301s 的负载:

Redirect 301 / http://blog.domain.com
Redirect 301 /subfolder/ http://blog.domain.com

但是,当我访问 htttp://blog.domain.com/blog 时,我被重定向到 http://blog.domain.comblog 而不是:http://blog.domain.com

以下是现有的 HTAccess 文件: /var/www/.htaccess

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /domain/
RewriteCond %{HTTP_HOST} ^78\.41\.157\.192$
RewriteRule ^(.*)$ http://blog.domain.co.uk/$1 [L,R=301]
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress

/var/www/blog/.htaccess

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

Redirect 301 / http://blog.domain.com
Redirect 301 /subfolder/ http://blog.domain.com

我没有编写 htaccess 文件,对任何错误或为什么添加 301 不起作用的任何见解都会很棒。我认为这是由于重写规则造成的。

【问题讨论】:

    标签: wordpress apache .htaccess mod-rewrite


    【解决方案1】:

    发生这种情况的原因是您在重定向目标的末尾缺少/。 Apache 的 Redirect 只是匹配目标 URI,然后将其后的任何内容附加到目标。所以:

    Redirect 301 / http://blog.domain.com/
    Redirect 301 /subfolder/ http://blog.domain.com/
    

    但是,由于您有 wordpress 路由规则,因此您根本不想使用 RedirectRedirect 是 mod_alias 的一部分,而不是 mod_rewrite,这意味着当请求的 URL 与两个模块都匹配时,它们都会被应用。所以你会得到一些奇怪的意外重定向。尝试仅使用 mod_rewrite,并在您的 wordpress 规则之前添加这些规则:

    RewriteRule ^$ http://blog.domain.com/ [L,R=301]
    RewriteRule ^subfolder/?$ http://blog.domain.com/ [L,R=301]
    

    【讨论】:

    • 谢谢! 3000 次重定向编辑后它可以完美运行。最后一个问题,如何避免老网站的404页面?
    • @AirCombat 您可以尝试查看FallbackResource 指令。如果没有找到某些东西,它就会被路由到那个位置。
    • 谢谢!我最终编辑了 RewriteRule 。 /blog/index.php [L] 到 RewriteRule 。 /index.php [L] 重定向到新站点 404 而不是理想的主页,但这已经足够了。
    猜你喜欢
    • 1970-01-01
    • 2015-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多