如何使用 mod_rewrite 删除 TLD 后的尾随点?

How to remove the trailing dot after TLD by using mod_rewrite?

有一些网站,比如:

http://example.org

我要禁止在顶级域名后加点:

http://example.org.

我的.htaccess(相关部分):

<IfModule mod_rewrite.c>

RewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)\./?$ / [L,R=301]

...

</IfModule>

这适用于此类请求,例如:

http://example.org/news./ -> http://example.org/news/
http://example.org/solutions./ -> http://example.org/solutions/

但是如果我把点放在一级域名后面,这个点仍然是:

http://example.org./ -> http://example.org.
http://example.org. -> http://example.org.

如果能提供信息,我将不胜感激。感谢大家。

您可以在 RewriteBase 行下方插入此规则以删除域名中的尾随点:

RewriteCond %{HTTP_HOST} ^(.+?)\.$
RewriteRule ^ http://%1%{REQUEST_URI} [L,R=302,NE]

我发现域名中的 Web 服务器允许尾随 DOT。甚至 https://www.google.com./https://www.google.com/ 的工作方式也相似。