我有一个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帖子不会显示,反之亦然。 请告诉我一个更好的方法。
答案 0 :(得分:1)
在&#34;现有&#34;中的RewriteEngine On
和RewriteBase
指令之后立即执行。 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
以/
(目录前缀)开头。