哪些 htaccess 规则将从 URI(如果包含则为 404)和内部链接中删除为站点提供服务的子目录?

哪些 htaccess 规则将从 URI(如果包含则为 404)和内部链接中删除为站点提供服务的子目录?

**请参阅下面的更新*****

我的主域名网站将由服务器上与域名同名的子目录提供服务,因此读取我的 webroot .htaccess 中这个混乱的块可能会造成混淆:

<IfModule mod_rewrite.c>
  RewriteEngine on
  RewriteBase /

  # remove www
  RewriteCond %{HTTP_HOST} ^www\.(.+)$
  RewriteRule ^.*$ %1 [NC,QSA,R=301]

  #RewriteCond %{ENV:REDIRECT_STATUS} . [OR]
  RewriteCond %{HTTP_HOST} ^(www\.)?my\-web\.agency$
  RewriteRule ^my-web.agency/ - [L,R=404]
  RewriteRule !^my-web.agency/ my-web.agency/%{REQUEST_URI} [NC,QSA]
</IfModule>

我已经为此工作了很长时间,改变了规则并构建了那个混乱结构,这就是我目前正在做的事情。

www. 仍然存在,因此删除它是完全无效的。

!^my-web.agency/ 规则确实能有效地为网站提供服务。但是,如果 URI 中包含子目录,我接下来尝试呈现 404 失败。

请向我解释如何理清这一切。我正在尝试阅读文档并学习和弄清楚,但不知何故我就是做不到,而且我已经投入了大量时间,我真的需要停下来,请帮助我,我将永远感激学习并仔细记录。非常感谢。

*****更新:**现在我有

# remove www, externally for consistent domains (successful)
RewriteCond %{HTTP_HOST} ^www\.(.+)$
RewriteRule .* http://[[percent]]1/$0 [NS,L,R=301,QSA]

RewriteCond %{HTTP_HOST} ^(www\.)?my\-web\.agency$
RewriteCond %{REQUEST_URI} ^my-web.agency
RewriteRule ^(.*)$ - [R=404,L,NC]

RewriteCond %{HTTP_HOST} ^(www\.)?my\-web\.agency$
RewriteCond %{REQUEST_URI} !^my-web.agency
RewriteRule ^(.*)$ /my-web.agency/$1 [L,NC,QSA]

如果尝试这样做,这确实会有效地使 www 消失。但所有内部链接仍然包含应该隐藏的子目录(例如,内部链接读取“http://my-web.agency/my-web.agency/somepage"),并且访问 URI 中带有子目录的页面仍然有效;我宁愿它返回 404。

如果我能找到正确的实现,DocumentRoot 或 RewriteBase 似乎是合乎逻辑的可能解决方案。([[percent]]第一个 RewriteRule 中的 http:// 是允许它通过编辑器而不会引发错误;只是指示%。)

相关内容