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

时间:2013-07-10 17:53:03

标签: 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.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]

这是第一个子目录中的.htaccess:

# 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

然而,当我打开URL www.mysite.com/page时,它会显示错误404.顺便说一句:我使用的是Wordpress,安装在第一个子目录中 - 这有什么区别吗?

此外,当我只删除两个子目录中的第一个时,它才有效。

有什么想法吗?提前谢谢!

2 个答案:

答案 0 :(得分:0)

它可能与wordpress提取路径信息和请求URI信息的方式有关。如果您请求/page,即使重写的请求到达wordpress,wordpress也可能会查看请求URI并查看&#34; /page&#34;并假设这是一个404.

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

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

以便请求/subdirectoryone/subdirectorytwo/page在其自己的请求中完成整个请求处理过程。

答案 1 :(得分:0)

我实际上没有解决这个问题,但我终于找到了一个解决方法,我想做什么:

我安装了WordPress插件'永久链接编辑器',它允许我从

更改URL
www.mysite.com/subdirectoryone/subdirectorytwo/page

www.mysite.com/subdirectoryone/page

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

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

这样,我可以通过网址www.mysite.com/page访问www.mysite.com/subdirectoryone/subdirectorytwo/page页面。

经验教训:在WordPress中,在询问愚蠢的问题之前,总是先寻找插件。

相关问题