**请参阅下面的更新*****
我的主域名网站将由服务器上与域名同名的子目录提供服务,因此读取我的 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:// 是允许它通过编辑器而不会引发错误;只是指示%
。)