我正在尝试重写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,安装在第一个子目录中 - 这有什么区别吗?
此外,当我只删除两个子目录中的第一个时,它才有效。
有什么想法吗?提前谢谢!
答案 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插件'永久链接编辑器',它允许我从
更改URLwww.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中,在询问愚蠢的问题之前,总是先寻找插件。