修改wordpress htaccess将某些url转发到子目录

时间:2013-10-14 16:30:45

标签: wordpress .htaccess

无论出于何种原因,我都无法确定,我的公司已决定使用wordpress进行其中一个网站。他们让我在同一个域上建立一个联盟应用程序,我做了。除了这个困境之外,一切都很好:

wordpress安装在根目录中。所有页面,视频,销售等都是在wordpress页面中制作的。

联盟会员申请位于子目录/ aff /,联盟会员页面可在mydomain.com/aff/index.php?aff=affiliateusername

找到

关联公司(及其潜在客户)应该只需输入www.mydomain.com/affiliateusername即可加载他们的网页,但我很难理解如何翻译wordpress htaccess规则来执行此操作。

显然,有这项工作的最佳顺序是wordpress首先确定是否有任何博客/帖子/页面与网址术语FIRST匹配,如果没有找到,则将所有其他内容重定向到www.mydomain的.com / AFF /的index.php?AFF =任何

这是我最终能够提出的适用于索引页面和联盟网页的内容,但是没有正确加载除索引之外的任何wordpress页面。

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /

RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
#RewriteRule ^(images|wp-admin|wp-content|wp-includes|go|compliance\.html)($|/) - [L]
#RewriteRule ^([^/].*)$ /aff/index.php?aff=$1 [R,L]
RewriteRule . /index.php [L]
</IfModule>

# END WordPress

你可以告诉我试图从重写中排除某些目录但是没有成功。我已经通过谷歌阅读其他建议,将重定向规则放在wordpress块之前,但问题很少。当我把这一行放在#BEGIN WordPress行的前面时,我得到一个无限的重定向循环,它继续转到/aff/index.php?aff=aff/index.php?...等等(这是我使用的同一行)对于同一个联盟应用程序在不同的,无文字的域名)

#RewriteRule ^([^/].*)$ http://www.mydomain.com/aff/index.php?aff=$1 [L]

我觉得我错过了一些非常明显的东西。我应该设置wordpress来将所有404重定向到/aff/index.php?aff=originalrequest吗?我该怎么做呢?

提前致谢。

1 个答案:

答案 0 :(得分:1)

您错误地使用RewriteRule代替RewriteCond s。在WordPress规则之间添加它们肯定会破坏您的博客。将您的.htaccess代码更改为:

<IfModule mod_rewrite.c>
  RewriteEngine On
  RewriteBase /

  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteRule ^([^/.]+)$ /aff/index.php?aff=$1 [R=301,QSA,L]

  RewriteRule ^index\.php$ - [L]

  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteRule . /index.php [L]
</IfModule>

如果您希望保留网址mydomain.com/affiliate,请移除[R]并仅使用[QSA,L]


我已更新上述规则,以说明如何从联盟重定向中排除路径。以下

RewriteCond %{REQUEST_URI} !^/blog\b

从重定向中排除指向/blog或其子目录/blog/sub/dirs的所有网址。


如果存在根级.php页面(即使它们很少),可以通过将规则更改为

来更轻松地处理排除
RewriteRule ^([^/.]+)$ /aff/index.php?aff=$1 [R=301,QSA,L]

假设联盟会员名称中永远不会出现./