微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何拆分htaccess域目录

如何解决如何拆分htaccess域目录

我有两个名为domainy和domainx的文件夹,它们指向同一个public_html文件夹。 我需要将两个域分开。以下代码无法正常工作。可以从一个域打开到另一个域。我想防止这种情况。

RewriteEngine On
RewriteCond %{HTTP_HOST} ^domainx.com$ [OR,NC]
RewriteCond %{HTTP_HOST} ^www.domainx.com$
RewriteCond %{REQUEST_URI} !domainx/
RewriteRule (.*) domainx/$1 [L]
RewriteCond %{HTTP_HOST} ^domainy.com$ [OR,NC]
RewriteCond %{HTTP_HOST} ^www.domainy.com$
RewriteCond %{REQUEST_URI} !domainy/
RewriteRule (.*) domainy/$1 [L]

解决方法

在两行之间阅读时,您想在内部将每个域的请求重写到相应的子目录中。而且还阻止直接访问该子目录。 (我认为将直接请求重定向回根目录是更好的选择。)

为简化起见(避免重复),我将假定子目录与域的名称相同(减去www子域和TLD),如您的示例一样。

.htaccess根文件中尝试以下操作。

RewriteEngine On

# Redirect direct requests to the subdirectory back to root
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteRule ^(domainx|domainy)/(.*) https://www.$1.com/$2 [R=301,L]

# Rewrite domainx to the subdirectory
RewriteCond %{HTTP_HOST} ^(?:www\.)?(domainx)\.com
RewriteRule !^domainx/ %1%{REQUEST_URI} [L]

# Rewrite domainy to the subdirectory
RewriteCond %{HTTP_HOST} ^(?:www\.)?(domainy)\.com
RewriteRule !^domainy/ %1%{REQUEST_URI} [L]

第一个重定向指令会将对子目录的直接请求重定向回各自域的根-根据所请求的子目录。例如:

  • www.domainx.com/domainx/<something>重定向到https://www.domainx.com/<something>
  • www.domainy.com/domainx/<something>重定向到https://www.domainx.com/<something>
  • www.domainx.com/domainy/<something>重定向到https://www.domainy.com/<something>
  • www.domainy.com/domainy/<something>重定向到https://www.domainy.com/<something>

检查REDIRECT_STATUS环境变量的条件避免了潜在的重定向循环,因为REDIRECT_STATUS环境变量没有在初始请求中设置,而是仅在第一次成功重写后才设置。

但是,如果在相应子目录中也包含mod_rewrite伪指令的这些域中有其他.htaccess文件,则此操作将失败。在这种情况下,您将需要从子目录中的.htaccess文件重定向回到根目录。如果子目录中确实有其他.htaccess文件,则可以通过其他方式简化上述指令。

仅当确定运行正常时,才使用302(临时)重定向进行测试并更改为301(永久),以避免潜在的缓存问题。

理想情况下,您应该规范化非www与www子域(决定一个或另一个)。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。