【问题标题】:.htaccess redirection for wordpresswordpress 的 .htaccess 重定向
【发布时间】:2016-12-28 00:49:47
【问题描述】:

由于我们的主题存在错误,我们正在努力完成这些任务

1.) 当用户现在点击登录时,他将访问 www.mysite.lu/en/wp-login.php 或 www.mysite.lu/fr/wp-login.php(WPML 多语言)。对于所有这些类型的 URL,其显示 404 页面。所以我们认为我们可以使用 .htaccess 重定向方法从 URL 中删除语言。 所以我们使用以下代码

   Redirect /en/wp-login.php /wp-login.php?redirect_to=http://mysite.lu/en/my-account
   Redirect /fr/wp-login.php /wp-login.php?redirect_to=http://mysite.lu/fr/my-account/
   Redirect /de/wp-login.php /wp-login.php?redirect_to=http://mysite.lu/de/my-account

使用上面的代码,我们的登录 URL 工作正常。

2.) 但是我们的注册网址是

   http://mysite.lu/en/wp-login.php?action=register

所以当我们点击注册链接时,它也会重定向到

   http://mysite.lu/de/my-account

这是不正确的。我们不想重定向注册 URL。

为此我们也尝试了下面的代码

 RewriteCond %{QUERY_STRING} !(^|&)action=register($|&) [NC]
 RewriteRule  /en/wp-login\.php$ /wp-login.php?redirect_to=http://mysite.lu/en/my-account [L,R=301]

但这也行不通。 请告诉我们做错了什么。

【问题讨论】:

    标签: php wordpress apache .htaccess redirect


    【解决方案1】:

    将此规则作为您的第一条规则:

    RewriteCond %{QUERY_STRING} !(^|&)action=register($|&) [NC]
    RewriteRule ^([a-z]{2})/wp-login\.php$ /wp-login.php?redirect_to=http://mysite.lu/$1/my-account [L,R=301,NE,NC]
    

    前导斜杠 / 在 .htaccess 中与每个目录指令不匹配。

    【讨论】:

    • 感谢您的帮助。现在奇怪的事情正在发生。 URL 是正确的,但我在登录时收到 404
    • 是的,奇怪的是,如果我评论你的两行代码,那么它就可以工作了。
    • 是的,如果我评论你的两行代码,它就可以工作。可能需要对您的代码进行一些修改,让我试试。
    • 确保此重定向规则是您的第一条规则。如果 URL 是您想要的,即http://example.com/wp-login.php?redirect_to=http‌​‌​‌​://mysit‌​e.‌​lu‌​/en/‌​my-a‌​ccou‌​nt,那么我相信这个重定向规则可以正常工作。
    • 太棒了。它的工作。我们如何将它转换为像 ezra 尝试做的所有语言
    【解决方案2】:

    基于我的 cmets 并且为了更清晰地阅读,请使用它,这样您就不会受到 RedirectMatch 无法查看查询字符串的影响:

    <If "! %{QUERY_STRING} =~ /^.+/"> # or ^action just for action
    RedirectMatch ^/(en|fr|de)/wp-login.php$ /wp-login.php?redirect_to=http://mysite.lu/$1/my-account/
    </If>
    

    【讨论】:

    • 对不起,但它不适用于注册 URL。注册网址为mysite.lu/en/wp-login.php?action=register
    • 你完全正确,我误判了 RedirectMatch 不会过滤或匹配查询字符串之后的任何内容,但不用担心,Apache 2.4 可以轻松检查。添加这个:&lt;If "! %{QUERY_STRING} =~ /^action/"&gt;RedirectMatch ^/(en|fr|de)/wp-login.php$ /wp-login.php?redirect_to=http://mysite.lu/$1/my-account/&lt;/If&gt;查找所有关于如果在link
    • 如果您使用 2.2,您可以使用 RewriteCond 和 RewriteRule 进行相同的精确检查,即 RewriteCond 检查 ^action 和 RewriteRule 的方式与重定向匹配完全相同,但使用适当的在重写结束时重写标志。如果你不明白,请告诉我。
    • 最后一个旁注。如果您有权访问服务器配置,请不要使用 .htaccesss,因为它并非旨在成为许多人似乎相信的某种“重写仓库”。它仅用于对主配置文件没有权限的用户。在 .htaccess 中匹配 ^/ 也不起作用,它必须是 ^something 而不是 ^/something
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-06
    • 2013-02-28
    • 2017-06-01
    • 2015-01-29
    • 2013-09-22
    相关资源
    最近更新 更多