我的网址结构目前如下:
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
有什么想法吗?
答案 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
。您可以将代理标志添加到重写,但是您需要更改上面的规则以不重定向此内部代理请求。