.htaccess 将尾随闪存添加到包含句点的 URL



我试图让 apache 重定向每个 URL 以在末尾添加一个尾部斜杠。我在使用以下类型的 URL 时遇到问题。

http://mywebsite.com/profile/大卫·泰特

无论出于何种原因,我的规则都不会在此类 URL 的末尾添加尾部斜杠。我需要在末尾添加斜杠。

我已经在stackoverflow中搜索了一些答案,但我找不到任何可以提供帮助的东西。我不是 URL 重写专家。

这是我现在的规则。

RewriteCond %{REQUEST_URI} /+[^.]+$
RewriteRule ^(.+[^/])$ %{REQUEST_URI}/ [R=301,L]

你能告诉我如何写上面的 URL 在末尾有一个尾部斜杠吗?

谢谢

我假设您只想将请求重定向到路径最后部分带有句点的 URL?并且可能也只有当它类似于旧的"文件扩展名"之类的东西时,用句点分隔文件的基本名称。所以有些东西在句点之前,而某些东西实际上在"文件名"中的句点之后?

RewriteEngine on
RewriteRule [^/]+.[^/]+$ %{REQUEST_URI}/ [R=301]

您需要注意,在某处没有其他规则可以再次删除尾部斜杠,这在框架等中通常是这种情况,以保持 URL 漂亮......

最好从302 临时重定向开始,然后在确定一切设置正确后将其更改为 301 永久重定向。这可以防止在尝试时出现缓存问题......

此规则在 http 服务器主机配置或动态配置文件(".htaccess"文件)中同样有效。显然,重写模块需要加载到 http 服务器内部并在 http 主机中启用。如果您使用动态配置文件,则需要注意在主机配置中完全启用其解释,并且它位于主机的DOCUMENT_ROOT文件夹中。

一般评论:您应该始终倾向于将此类规则放在 http 服务器主机配置中,而不是使用动态配置文件(".htaccess")。这些动态配置文件增加了复杂性,通常是意外行为的原因,难以调试,并且它们确实会减慢 http 服务器的速度。它们仅作为最后选项提供,用于您无法访问真正的http服务器主机配置(阅读:非常便宜的服务提供商)或坚持编写自己的规则的应用程序(这是一个明显的安全噩梦)。

您可以使用此规则向除现有文件之外的所有 URL 添加尾部斜杠:

RewriteEngine On
# add a trailing slash to directories
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule [^/]$ %{REQUEST_URI}/ [L,R=301,NE]

最新更新