Wordpress 如何通过mod_rewrite从URL中删除两个子目录?

Wordpress 如何通过mod_rewrite从URL中删除两个子目录?,wordpress,apache,.htaccess,mod-rewrite,Wordpress,Apache,.htaccess,Mod Rewrite,我试图重写一个URL以删除两个子目录,并在根目录中显示页面。这是我在.htaccess中使用的代码: RewriteRule ^page$ subdirectoryone/subdirectorytwo/page [NC,QSA,L] 这是根目录中完整的.htaccess文件: Options +FollowSymLinks RewriteEngine on RewriteCond %{HTTPS_HOST} ^mysite.com RewriteRule (.*) https://www

我试图重写一个URL以删除两个子目录,并在根目录中显示页面。这是我在.htaccess中使用的代码:

RewriteRule ^page$ subdirectoryone/subdirectorytwo/page [NC,QSA,L]
这是根目录中完整的.htaccess文件:

Options +FollowSymLinks

RewriteEngine on

RewriteCond %{HTTPS_HOST} ^mysite.com
RewriteRule (.*) https://www.mysite.com/$1 [R=301,L]

RewriteCond %{HTTP_HOST} ^mysite.com
RewriteRule (.*) https://www.mysite.com/$1 [R=301,L]

RewriteCond %{SERVER_PORT} !=443
RewriteRule ^(.*)$ https://www.mysite.com/$1 [R=301,L]

# remove trailing slashes
RewriteRule (.*)/$ $1 [L,R=301]

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

# END WordPress
RewriteRule ^page$ subdirectoryone/page [NC,QSA,L]
这是第一个子目录中的.htaccess:

Options +FollowSymLinks

RewriteEngine on

RewriteCond %{HTTPS_HOST} ^mysite.com
RewriteRule (.*) https://www.mysite.com/$1 [R=301,L]

RewriteCond %{HTTP_HOST} ^mysite.com
RewriteRule (.*) https://www.mysite.com/$1 [R=301,L]

RewriteCond %{SERVER_PORT} !=443
RewriteRule ^(.*)$ https://www.mysite.com/$1 [R=301,L]

# remove trailing slashes
RewriteRule (.*)/$ $1 [L,R=301]

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

# END WordPress
RewriteRule ^page$ subdirectoryone/page [NC,QSA,L]
#开始WordPress
重新启动发动机
重写基/子目录/
重写规则^index\.php$-[L]
重写cond%{REQUEST_FILENAME}-F
重写cond%{REQUEST_FILENAME}-D
重写规则/子目录one/index.php[L]
#结束WordPress
但是,当我打开URL www.mysite.com/page时,它显示一个错误404。顺便问一下:我正在使用Wordpress,安装在第一个子目录中——这有什么区别吗

另外,当我只删除两个子目录中的第一个子目录时,它也可以工作


有什么想法吗?提前谢谢

这可能与wordpress提取路径信息和请求URI信息的方式有关。如果您请求
/page
,并且即使重写的请求到达wordpress,wordpress可能会查看请求URI并查看“
/page
”,并假设这是404

我确信有一些wordpress特定的方法来处理这类事情,但是如果你加载了mod_proxy,你可以尝试在你的规则中添加一个
p
标志:

RewriteRule ^page$ /subdirectoryone/subdirectorytwo/page [NC,QSA,L,P]

因此,请求
/subdirectory one/subdirectory two/page
在它自己的请求中经历了整个请求处理过程。

我并没有真正解决这个问题,但我最终找到了一个解决我想要做的事情的方法:

我安装了WordPress插件“Permalink编辑器”,它允许我从

www.mysite.com/subdirectoryone/subdirectorytwo/page

然后,我将以下内容添加到根目录中的.htaccess中:

Options +FollowSymLinks

RewriteEngine on

RewriteCond %{HTTPS_HOST} ^mysite.com
RewriteRule (.*) https://www.mysite.com/$1 [R=301,L]

RewriteCond %{HTTP_HOST} ^mysite.com
RewriteRule (.*) https://www.mysite.com/$1 [R=301,L]

RewriteCond %{SERVER_PORT} !=443
RewriteRule ^(.*)$ https://www.mysite.com/$1 [R=301,L]

# remove trailing slashes
RewriteRule (.*)/$ $1 [L,R=301]

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

# END WordPress
RewriteRule ^page$ subdirectoryone/page [NC,QSA,L]
通过这种方式,我可以从URL www.mysite.com/page访问www.mysite.com/subdirectory one/subdirectory two/page页面


经验教训:在WordPress中,在问愚蠢的问题之前,一定要先寻找插件。

是的,它与WP安装有很大的区别。WP劫持每个URL并试图通过index.php将其路由,这很可能就是您获得404的原因。让我们看看你的全部访问规则。谢谢你的提示。我添加了完整的代码。两个目录中都安装了wordpress吗?如果没有,为什么Wp规则在这两个方面都有。它应该位于安装目录的htaccess中。这将有助于启动。好的,我删除了它。我更新了帖子。再次感谢。好的,您已经在子文件夹中安装了WP,对吗?好吧,别担心,这就是它看起来的样子。