没有从一个文件夹到另一个文件夹的重定向(重写)

时间:2015-03-13 14:15:37

标签: wordpress apache .htaccess mod-rewrite

完整的.htaccess文件

以下是我的完整htaccess文件。

<IfModule mod_rewrite.c>
Options +FollowSymLinks
RewriteEngine On
RewriteBase /

#redirect index to homepage
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]

#prevent hotlinking
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?www.example.com [NC]
RewriteRule \.(jpg|jpeg|png|gif)$ - [NC,F,L]

#redirect galleries to portfolio
RewriteRule ^galleries/(.*)$ /portfolio/$1 [R=301,NC,L]

#prevent access to wp-config
<files wp-config.php>
 order allow,deny
 deny from all
</files>
</IfModule>

有问题的指令

以下是显而易见的问题:

#redirect galleries to portfolio
RewriteRule ^galleries/(.*)$ /portfolio/$1 [R=301,NC,L]

预期结果

如果我转到http://subdomain.example.com/galleries/headshots/,服务器应重定向到http://subdomain.example.com/portfolio/headshots/

发生了什么

什么都没发生,我留在http://subdomain.example.com/galleries/headshots/

到目前为止我没有尝试过什么

我在两者的末尾添加了斜杠,源和目标 - 没有改变:

#redirect galleries to portfolio
RewriteRule ^galleries/(.*)$/ /portfolio/$1/ [R=301,NC,L]

还尝试将指令置于顶部,就在RewriteBase /下方 - 仍然没有运气。

注释

请注意,这发生在子域上(请参阅示例网址),但我认为这不会对此行为产生影响。

这是在Wordpress安装上发生的,但我怀疑它会影响到它。所有其他指令似乎都运行良好(对变化做出反应)。

编辑(来自对@Panama Jack的评论回复):两个目录实际上都存在并且是单独的页面,但如果你愿意,一个目录只能设置为脚本(其他页面必须访问它库)。

2 个答案:

答案 0 :(得分:1)

在重写规则中,网址应以/开头。

此外,部分(.*)$/非常奇怪:你首先寻找任何东西直到结束然后添加斜杠。您是否要将重写规则限制为目录?那么为什么不在模式中包含尾部斜杠:(.*)/$

以下规则会将{em>所有重定向到/galleries/

下方
RewriteRule ^/galleries/(.*)$ /portfolio/$1 [R=301,NC,L]

答案 1 :(得分:1)

Slash在错误的地方。改变这个

RewriteRule ^galleries/(.*)$/ /portfolio/$1/ [R=301,NC,L]

到这个

RewriteRule ^galleries/(.*)/$ /portfolio/$1/ [R=301,NC,L]