将自定义 WordPress 页面转换为核心 PHP - 区分大小写的 URL 问题

问题描述 投票:0回答:1

我们目前正在将网站的自定义 WordPress 页面迁移到核心 PHP。但是,我们遇到了与 URL 大小写敏感相关的问题,我们正在努力解决。

在我们的 WordPress 设置中,URL 不区分大小写,允许小写和大写变体解析到同一页面。例如,https://example.com/Explorehttps://example.com/explore都成功加载“探索”页面。另一个例子是https://example.com/Game-details/game/123456。游戏详情是 PHP 页面,12345 是关键游戏字段的值。

但是,在将这些页面转换为核心 PHP 并部署它们之后,我们注意到只有小写 URL 才能按预期工作。大写 URL 会导致 404 错误。

我们在 .htaccess 文件中尝试了各种解决方案来强制使用小写 URL,例如使用 RewriteMap 和 RewriteRules。虽然这些解决方案成功地将大写 URL 重定向为小写,但不幸的是,它们会影响图像和 JavaScript 等其他文件,从而导致意外问题。

RewriteEngine On RewriteCond %{REQUEST_URI} [A-Z] RewriteRule ^(.*)$ /${至下:$1} [R=301,L]

但它会转换图像路径并显示图像为404。

我们正在寻求有关如何在核心 PHP 环境中正确处理 URL 大小写敏感性的建议,而不会导致与其他文件的冲突或破坏现有功能。任何见解或替代方法将不胜感激。

预先感谢您的协助!

php apache .htaccess
1个回答
0
投票
RewriteEngine On
RewriteCond %{REQUEST_URI} [A-Z]
RewriteRule ^(.*)$ /${tolower:$1} [R=301,L]

我们刚刚从 htaccess 文件中的链接中删除了 .php 扩展名。

由于这还会转换图像路径和其他静态资源(JavaScript、CSS 等),因此您只需将此规则应用于映射到

.php
文件的 URL。或者排除映射到静态资产的 URL...通过排除以特定文件扩展名结尾的 URL(首选)或已映射到文件的 URL。

例如:

# Exclude static assets from lowercase conversion
RewriteRule %{REQUEST_URI} !\.(css|js|gif|jpg|webp)$ [NC]
RewriteCond %{REQUEST_URI} [A-Z]
RewriteRule ^(.*)$ /${tolower:$1} [R=301,L]

测试前您需要清除浏览器缓存。使用 302(临时)重定向以避免潜在的缓存问题。

如果所有静态资源都位于子目录中,那么您可以直接排除该子目录。例如:

RewriteRule %{REQUEST_URI} !^/assets/ [NC]
© www.soinside.com 2019 - 2024. All rights reserved.