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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了.htaccess:将根URL重定向到子目录,但保留根URL相关的知识,希望对你有一定的参考价值。

我正在清理域名的目录结构(对我来说,在根目录中设置根URL的内容很糟糕!)并且需要一些关于如何正确使用RewriteRule的见解。

要旨

我希望domain.tld使用domain.tld /子目录/但仍然在url中显示为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]

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

答案

试试这个:

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 Spiros

另一答案

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

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

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

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

另一答案

这两条规则都是有效的:

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

RewriteRule ^/$ /subdirectory/ [L]

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

RewriteRule ^$ /subdirectory/ [L]

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

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

另一答案

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

以上是关于.htaccess:将根URL重定向到子目录,但保留根URL的主要内容,如果未能解决你的问题,请参考以下文章

.htaccess - 将所有 URL + 现有目录重定向到 index.php

htaccess如何将子目录重定向到外部URL

.htaccess 将域重定向到子目录而不更改 URL

将根 url 重定向到 Rails 应用程序中的其他位置

htaccess重定向到没有页面ID和新目录的URL

.htaccess 从站点根目录重定向到公共文件夹,在 URL 中隐藏“公共”?