【问题标题】:Redirect url of wordpress site on the basis of string using htaccess使用htaccess基于字符串重定向wordpress站点的url
【发布时间】:2015-05-29 01:25:56
【问题描述】:

我有一个 wordpress 网站,例如。 http://www.domain.com/ 带有托管在 linux 服务器上的自定义主题并且工作正常。一些营销策略要求我区分 2 种 URL(它们将从广告中拍摄)并基于此将网站重定向到不同的链接。

例如:

如果 URL 包含 /xyz/ 即:
http://www.domain.com/xyz/category/post 我希望它被重定向到 一个中间页面,即:http://www.domain.com/intermediate.php 如果 网址不包含 /xyz/ 即:
http://www.domain.com/category/post 帖子应显示为 平常。

我发现这不能像在触发第一个钩子之前那样在 wordpress 代码中完成,处理 url 并抛出 404 页面。

我能做到这一点的唯一方法是修改 .htaccess 文件。

我找到了一段代码:

RewriteRule ^(.*)/xyz/(.*)$ http://www.domain.com/intermediate.php [L,R=301]

第二种方式是:

RewriteCond %{REQUEST_URI} /xyz/
RewriteRule .* http://www.domain.com/intermediate.php

我真的很困惑将它与 wordpress 创建的 htaccess 文件中的现有代码一起使用:

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

# END WordPress

我尝试合并代码,即:

<IfModule mod_rewrite.c>
Options +FollowSymlinks
RewriteEngine On
RewriteBase /domain/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /domain/index.php [L]
RewriteCond %{REQUEST_URI} /xyz/
RewriteRule  RewriteRule ^(.*)/xyz/(.*)$ http://domain.com/intermediate.php
</IfModule>

但一次只有一个有效,即:当重定向有效时,wordpress 帖子不会显示,反之亦然。 请告诉我一个更好的方法。

【问题讨论】:

    标签: wordpress .htaccess redirect


    【解决方案1】:

    在“现有”WordPress 代码中的 RewriteEngine OnRewriteBase 指令之后立即尝试以下操作:

    RewriteRule xyz/ http://www.domain.com/intermediate.php [L,R=301]
    

    这将在请求的 URL 中的任何位置搜索“xyz/”,并在找到时重定向。请注意,在 .htaccess 文件中,目录前缀(在这种情况下为/)在模式匹配之前从 URL 路径中删除。因此,以 / 开头的模式将永远不会匹配 URL 的开头。

    外部重定向通常应该先于内部重写,这是默认的 WordPress 指令所做的。

    您提到的替代方法效率较低:

    RewriteCond %{REQUEST_URI} /xyz/
    RewriteRule .* http://www.domain.com/intermediate.php [R=301,L]
    

    这将有效地做同样的事情,但由于通用的.* 模式,会导致每个请求都被处理。请注意,REQUEST_URI 确实/(目录前缀)开头。

    【讨论】:

    • 非常感谢您的快速响应,但是如果 URL 中的其他位置有 xyz,它会重定向它。如何仅当 URL 出现在斜线内时才重定向 URL,即:“/xyz/”?
    猜你喜欢
    • 2012-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多