我们目前正在将网站的自定义 WordPress 页面迁移到核心 PHP。但是,我们遇到了与 URL 大小写敏感相关的问题,我们正在努力解决。
在我们的 WordPress 设置中,URL 不区分大小写,允许小写和大写变体解析到同一页面。例如,https://example.com/Explore和https://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 大小写敏感性的建议,而不会导致与其他文件的冲突或破坏现有功能。任何见解或替代方法将不胜感激。
预先感谢您的协助!
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]