.htaccess:将根URL重定向到子目录,但保留根URL

时间:2011-07-21 10:08:19

标签: apache .htaccess mod-rewrite

我正在清理域名的目录结构(在根目录中设置root url的内容对我来说很糟糕!)并且需要了解如何正确使用RewriteRule。

要点

我希望 domain.tld 使用 domain.tld / subdirectory / ,但仍然在网址中显示为 domain.tld

我的.htaccess到目前为止

Options +FollowSymlinks
RewriteEngine On

#Force removal of wwww subdomain
RewriteBase /
RewriteCond %{HTTP_HOST} ^www.domain.tld
RewriteRule ^(.*)$ http://domain.tld/$1 [R=301,L]

#Trailing slash
RewriteRule ^/*(.+/)?([^.]*[^/])$ http://%{HTTP_HOST}/$1$2/ [L,R=301]

#Redirect root url to subdirectory
RedirectMatch 301 ^/subdirectory/$ http://domain.tld/
RewriteRule ^/$ /subdirectory/?$ [L]

RedirectMatch效果很好。不幸的是,似乎最后一个RewriteRule 应该工作得足够简单,但事实并非如此。仍会显示根目录中的旧内容设置。

我在这里缺少什么?

更新:已解决

简单的修复,我对.htaccess / apache没有经验,能够解释原因。

我有:

RewriteRule ^/$ /subdirectory/?$ [L]

删除一个斜杠修复了所有内容:

RewriteRule ^$ /subdirectory/?$ [L]

所以现在我的问题是:为什么会这样?

4 个答案:

答案 0 :(得分:2)

试试这个:

RewriteEngine on
RewriteBase /

RewriteCond %{REQUEST_URI} !^/subdirectory/

# REWRITES ALL URLS 
# [REPLACE "domain" WITH THE ACTUAL DOMAIN, 
# WITHOUT THE TLD (.com, .net, .biz, etc)]
RewriteCond %{HTTP_HOST} ^(www\.)?domain\.

# REWRITE ALL THOSE TO subdirectory
RewriteRule ^(.*)$ /subdirectory/$1 [L]

BR 斯皮罗斯

答案 1 :(得分:0)

RewriteRule中的URI部分不包含前面的斜杠。

为了匹配http://example.com/,您必须使用RewriteRule ^$,其中RewriteRule ^/$理论上匹配http://example.com//(请注意双斜杠)。

附加:?$在最后没有任何意义,因为这会添加一个带有空参数$的查询字符串。

最后你有:RewriteRule ^$ /subdirectory/ [L,QSA]

答案 2 :(得分:0)

这两项规则都是有效

这个用于服务器配置或虚拟主机上下文 URL以前导斜杠开头):

RewriteRule ^/$ /subdirectory/ [L]

如果您在 .htaccess 中放置相同的规则,则必须删除前导斜杠(,因为它相对于当前文件夹):

RewriteRule ^$ /subdirectory/ [L]

<强> P.S。 Floern已经提到了?$它的目标URL部分。根本不需要$。如果您使用?完成了URL,则告诉Apache不要将查询字符串转移到新URL(完全删除查询字符串)。

此外,仅当您使用查询字符串进行操作(目标URL中包含[QSA])并且仍希望将当前查询字符串附加到新构建的URL时,才需要?标志。这意味着在此规则中RewriteRule ^$ /subdirectory/ [L,QSA] [QSA]标记根本不执行任何操作,可以安全删除。

答案 3 :(得分:0)

我尝试了解决方案,但在我的情况下删除/ folder / BUT显示旧网站(www.site.it)而不是www.site.it/folder/与&#39;文件夹&#39;删除...我复制并粘贴相同的代码,但在我的情况下不起作用:(我开了一个新主题:.htaccess: Redirect root wordpress url to another wordpress in a subdirectory, but retain root url