.htaccess重写以同时更改域并删除路径

时间:2012-02-26 16:40:34

标签: apache .htaccess url rewrite

我的网址结构目前如下:

http://domain.com/folder/filename(CURRENT)

我想更改此设置,以便我可以使用以下网址:

http://sub.domain.com/filename(新)

因此,访问CURRENT 新网址时,应加载位于CURRENT网址的文件,但在地址栏中显示新网址。它应该只适用于“/ folder /”路径。

sub.domain.com是domain.com的镜像,即。它们共享相同的文件系统和根目录。

这是我到目前为止所做的:

Options +FollowSymLinks
RewriteBase /

RewriteCond %{HTTP_HOST} ^(www.)?domain.com$ [NC]
RewriteCond %{REQUEST_URI} ^/folder/?(.*)$ [NC]
RewriteRule ^(.*)$ http://sub.domain.com/$1 [R=301,L]

这是有效的,但缺少从路径中删除“/ folder /”的规则。我尝试过组合多个RewriteRule而没有运气。有任何想法吗?感谢。


更新:再次感谢@Gerben - 我了解您的规则现在正在做什么,但第二个不适合我。我怀疑是因为它与其他一些重写规则相冲突,特别是那些在我的.htaccess文件中较低的WordPress规则:

# BEGIN WordPress
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
# END WordPress

因此,页面以重定向循环结束,即(来自Chrome): “http://sub.domain.com/folder/index.php的网页导致了太多的重定向。” - 虽然我最初尝试访问的网址是,例如http://sub.domain.com/page

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

尝试:

RewriteCond %{HTTP_HOST} ^(www.)?domain.com$ [NC]
RewriteRule ^(folder/)?(.*)$ http://sub.domain.com/$2 [R=301,L]

这会将所有内容重定向到sub.domain.com,并删除URI /folder部分(如果它在那里)。如果没有,它会重定向并保持URI不受影响。

答案 1 :(得分:0)

RewriteCond %{THE_REQUEST} /folder/
RewriteRule ^folder/(.*)$ http://sub.domain.com/$1 [R=301,L]

RewriteCond %{HTTP_HOST} ^sub\.domain\.com$ [NC]
RewriteCond %{REQUEST_URI} !^/folder/
RewriteRule ^(.*)$ folder/$1 [L]

# WordPress rules here

修改第二个R=301不应该在那里

但这不起作用,因为wordpress无法知道你想要folder。您可以将代理标志添加到重写,但是您需要更改上面的规则以不重定向此内部代理请求。