首页 > 解决方案 > .htaccess 子域重写规则不起作用

问题描述

我正在做一个网站建设者,我想让网址更漂亮。

该网址将是例如:

https://ccc-bb.example.com=>https://example.com/project/show/ccc/bb

这是我的.htaccess文件:

<IfModule mod_rewrite.c>
RewriteEngine On
# prevents files starting with dot to be viewed by browser
RewriteRule /\.|^\.(?!well-known/) - [F]

# front controller
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)\-(.*)$ https://example.com/project/show/$1/$2 [L]

当我使用上面的 ( https://ccc-bb.example.com) 时,它会将我发送到子域空文件夹。该文件夹只有 .htaccess 文件。

空子域文件夹

我错过了什么?我从未编辑过 .htaccess 文件,谷歌也没有帮助我(或者我不知道我应该寻找什么)。

标签: .htaccessmod-rewritesubdomain

解决方案


您的点文件的第一条规则是可以的,但反过来会更好,因为第二部分只能匹配开始,但第一部分只能匹配子目录。

RewriteRule ^\.(?!well-known/)|/\. - [F]

您的另一个规则的问题是您希望它与子域匹配。RewriteRules 不会对您在浏览器地址栏中看到的整个字符串进行操作,仅对路径部分进行操作,并且.htaccess由于前导目录也被剥离,因此它们看到的更少。要访问您想要的信息,请使用RewriteCond

RewriteCond %{HTTP_HOST} ^([^-]++)-([^-.]++)\.example\.com$
RewriteRule ^(?!project/show/).* project/show/%1/%2/$0 [L,DPI]

\.example\.com$如果您的主域不包含连字符,则不需要包含。)


推荐阅读