gpt4 book ai didi

php - Apache 或 PHP 重定向到奇怪的 URL

转载 作者:行者123 更新时间:2023-12-04 05:36:55 25 4
gpt4 key购买 nike

我正在尝试为开发测试设置动态应用程序服务框架。

我想要的结果是,当用户访问 URL 时,如果它的格式为 hostname.com/somecategory/someapplicationname/hostname.com/somecategory/someapplicationname (末尾没有斜杠),只要类别和应用程序名称作为键存在,它就应该为用户提供数据库中请求的应用程序。

我有一个特殊情况,一些应用程序不在数据库中,并且它们存在于具有相同 URL 的文件中,因此我们优先于任何数据库记录提供现有文件。

来自数据库的动态内容的案例工作正常。仅当末尾有斜杠时,现有文件的大小写才能 100% 工作。如果斜杠不存在,它将提供正确的文件,但 URL 看起来很奇怪。它会显示:hostname.com/somecategory/someapplicationname/?category=somecategory&appname=someapplicationname所以,它有效,但意外的输出让我觉得解决方案不完整。

我使用的是 apache mod_rewrite,我的 .htaccess 文件如下:

RewriteEngine on
RewriteRule ^([A-Za-z0-9-]+)/([A-Za-z0-9-]+)/?$ route.php?category=$1&appname=$2 [NC,L]

特定于这种情况的 PHP 代码如下。为了便于阅读,我从这个片段中剥离了验证和数据库连接,但保留了这个特殊情况的逻辑。
$file = $_SERVER['DOCUMENT_ROOT'] . $_GET['category'] . "/" . $_GET['appname'] . "/index.php";
$fileNoPHP = $_SERVER['DOCUMENT_ROOT'] . $_GET['category'] . "/" . $_GET['appname'] . "/index.html";
$_fileExists = file_exists($file);
$_fileNoPHPExists = file_exists($fileNoPHP);
include_once($_fileExists ? $file : $fileNoPHP);

需要明确的是,我的问题是:为什么我现有的文件案例将 GET 参数附加到 URL 的末尾,仅当末尾的斜杠不存在时?

谢谢你的时间。如果您需要更多信息,请告诉我,我会提供。

最佳答案

您拥有的规则并不是导致 URL 看起来奇怪的原因:

RewriteRule ^([A-Za-z0-9-]+)/([A-Za-z0-9-]+)/?$ route.php?category=$1&appname=$2 [NC,L] 

这应该没问题。在某个地方,您要么生成该链接,要么将浏览器重定向到该链接。如果你有一个看起来像这样的规则:
RewriteRule route.php /%1/%2/ [R=301,L]

您需要通过添加 ? 来删除查询字符串。最后:
RewriteRule route.php /%1/%2/? [R=301,L]

或者,如果您使用的是 Apache 2.4,请包含 QSD括号中的标志。

如果这不能解决问题,您需要添加规则以确保附加斜杠,尽管这可能是 DirectorySlash 的问题。为您重定向(您可以关闭)。

关于php - Apache 或 PHP 重定向到奇怪的 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11814189/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com