使用htaccess在字符串的基础上重定向wordpress站点的URL

时间:2015-03-25 11:37:31

标签: wordpress .htaccess redirect

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

例如:

  

如果网址包含/ xyz / ie:
  http://www.domain.com/xyz/category/post我希望将其重定向到   中间页面,即:http://www.domain.com/intermediate.php和if   网址不包含/ xyz / ie:
  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帖子不会显示,反之亦然。 请告诉我一个更好的方法。

1 个答案:

答案 0 :(得分:1)

在&#34;现有&#34;中的RewriteEngine OnRewriteBase指令之后立即执行。 WordPress代码试试这个:

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

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

外部重定向通常应在内部重写之前进行,这是默认的WordPress指令所做的。

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

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

这将有效地执行相同的操作,但由于通用.*模式,将导致每个请求被处理。请注意,REQUEST_URI /(目录前缀)开头。

相关问题