gpt4 book ai didi

.htaccess - mod_rewrite 删除 .php 扩展名并保留 GET 参数

转载 作者:行者123 更新时间:2023-12-04 17:36:46 24 4
gpt4 key购买 nike

我已经查看了这些解决方案,但实际上没有一个在我的终端上正常工作:

mod_rewrite to remove .php but still serve the .php file?

How to remove file extension from website address?

How to use Apache Mod_rewrite to remove php extension, while preserving the GET parameters?

他们只是不执行以下操作,而这正是我需要做的:

1) 从文件中删除 .php 扩展名,而不是/index.php 显示/index

2) 保留 GET 参数(我在加载文件时读取并存储在 session cookie 中,在标题中),所以不是/index.php?a=1&b=2 显示可能是/index/a1/b2

3) 在子域和 https://上工作,而不会完全弄乱 URL 或以无限循环或其他方式结束......

有没有人知道如何将这些规则放在一起,以便正确地涵盖以上 3 点?

这是我正在使用的起点:

RewriteCond %{THE_REQUEST} (\.php(.*)\sHTTP/1)
RewriteRule ^(.+)\.php$ /$1 [R=301,L,QSA]

最佳答案

你看错了。您不想将 .php 文件的请求重定向到一个干净的地址,因为您从不希望用户首先看到 .php。相反,您需要接受一个不以 .php 结尾的请求,然后检查该文件(在表面之下)是否实际上具有 .php 扩展名。然后,如果是这种情况,请静默重写请求以添加 .php 扩展名,以便用户永远不需要看到扩展名。

请尝试以下操作:

RewriteCond %{DOCUMENT_ROOT}/$1.php -f
RewriteRule ^([a-zA-Z0-9_-]+)/?$ /$1.php [QSA]

RewriteCond 检查请求(附加到 DOCUMENT_ROOT 路径的末尾)是否在将“.php”添加到其末尾后形成有效的文件名。如果是这样,则允许 RewriteRule 以静默方式重写请求,以便将“.php”添加到请求路径中。 QSA 标志告诉 mod_rewrite 将现有查询字符串附加到新请求路径的末尾,因此应保留您的 GET 变量。

请注意,DOCUMENT_ROOT 可能已经或可能没有尾部斜杠,因此您可能需要在 $1 之前去掉斜杠。在 RewriteCond 中。

至于查询字符串参数,mod_rewrite 无法处理无限数量的变量,因此您需要在问题中给出明确的请求模式,然后 mod_rewrite 解决方案才能提供将其映射到查询字符串的方法。

关于.htaccess - mod_rewrite 删除 .php 扩展名并保留 GET 参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16230422/

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