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

修改wordpress htaccess以将某些URL转发到子目录,wordpress,.htaccess,Wordpress,.htaccess,无论出于何种原因,我无法确定,我的公司已经决定与wordpress合作开发他们的一个网站。他们让我在同一个域上构建一个附属应用程序,我做到了。除此之外,一切都很顺利: wordpress安装在根目录中。所有页面、视频、销售等都来自wordpress页面 附属公司应用程序位于子目录/aff/中,附属公司的页面位于mydomain.com/aff/index.php?aff=affiliateusername 附属公司(及其潜在客户)只需输入www.mydomain.com/affiliateuse

无论出于何种原因,我无法确定,我的公司已经决定与wordpress合作开发他们的一个网站。他们让我在同一个域上构建一个附属应用程序,我做到了。除此之外,一切都很顺利:

wordpress安装在根目录中。所有页面、视频、销售等都来自wordpress页面

附属公司应用程序位于子目录/aff/中,附属公司的页面位于mydomain.com/aff/index.php?aff=affiliateusername

附属公司(及其潜在客户)只需输入www.mydomain.com/affiliateusername即可加载页面,但我很难理解如何翻译wordpress htaccess规则来实现这一点

显然,进行这项工作的最佳顺序是wordpress首先确定是否有与url术语匹配的博客/帖子/页面,如果没有找到,然后将所有其他内容重定向到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将所有404重定向到/aff/index.php?aff=originalrequest?我该怎么做呢


提前感谢。

您正在错误地使用
重写规则
s代替
重写条件
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>
从重定向中排除指向
/blog
或其子目录
/blog/sub/dirs
的所有URL
如果存在根级别
.php
页面(即使页面很少),则可以通过将规则更改为

RewriteRule ^([^/.]+)$ /aff/index.php?aff=$1 [R=301,QSA,L]

假设
/
不能出现在分支机构名称中。

您错误地使用了
重写规则
s代替
重写条件
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>
从重定向中排除指向
/blog
或其子目录
/blog/sub/dirs
的所有URL
如果存在根级别
.php
页面(即使页面很少),则可以通过将规则更改为

RewriteRule ^([^/.]+)$ /aff/index.php?aff=$1 [R=301,QSA,L]

假设一个
和一个
/
不能出现在分支机构名称中。

首先,非常感谢。将其置于index.php重写规则之前是有意义的。乍一看,这是完美的工作,并加载索引页以及附属网页正确。但是,博客页面也会重定向到附属页面。我试图以我所知道的方式将这些页面从重写规则中排除,但我认为这是行不通的,因为wordpress使用URL的独特方式。我可以从分支重定向中排除每个博客页面URL,但我该如何做到这一点?@user1867350你能告诉我你的博客页面URL是什么样的吗?目前,我的规则假设
mydomain.com/anything without slash
是一个附属机构。是的,好吧-最初用户访问index.php并选择in,然后他们将通过wordpress中的一系列向上/向下销售组合页面。所以要排除的wordpress页面有7个,例如www.mydomain.com/page-to-exclude1.php、www.mydomain.com/page-to-exclude2.php等。虽然数量不多,但也有一些。@user1867350,如果
永远不能出现在分支机构名称中,则可以通过匹配
[^/]+
上的
重写规则来更容易地处理。检查更新。工作完美-并且在分支机构名称中除了字母数字之外,永远不会有任何字符。让我看看我是否理解其中的原则。RewriteCond定义了一个要注意的术语,以及需要对其执行的操作。RewriteRule是在没有任何内容符合任何先前条件的情况下如何处理页面。此处的位:^([^/]+)$表示包含该术语之前的所有内容,并排除另一个正斜杠,那么无论该术语是什么,都将在下一个语句中处理^([^/]+)$是一样的,但不包括另一个正斜杠和句点。首先,非常感谢。将其置于index.php重写规则之前是有意义的。乍一看,这是完美的工作,并加载索引页以及附属网页正确。但是,博客页面也会重定向到附属页面。我试图以我所知道的方式将这些页面从重写规则中排除,但我认为这是行不通的,因为wordpress使用URL的独特方式。我可以从分支重定向中排除每个博客页面URL,但我该如何做到这一点?@user1867350你能告诉我你的博客页面URL是什么样的吗?目前,我的规则假设
mydomain.com/anything without slash
是一个附属机构。是的,好吧-最初用户访问index.php并选择in,然后他们将通过wordpress中的一系列向上/向下销售组合页面。所以要排除的wordpress页面有7个,例如www.mydomain.com/page-to-exclude1.php、www.mydomain.com/page-to-exclude2.php等。虽然数量不多,但也有一些。@user1867350,如果
永远不能出现在分支机构名称中,则可以通过匹配
[^/]+
上的
重写规则来更容易地处理。检查更新。工作完美-并且在分支机构名称中除了字母数字之外,永远不会有任何字符。让我看看我是否理解其中的原则。RewriteCond是定义一个要注意的术语和内容的地方