htaccess - 从 url 中删除 .php 扩展名

Posted

技术标签:

【中文标题】htaccess - 从 url 中删除 .php 扩展名【英文标题】:htaccess - remove .php extension from url 【发布时间】:2022-01-21 14:45:48 【问题描述】:

我尝试了很多代码从 url 中删除 .php 例如 - ht.abuena.net/presto.php -> ht.abuena.net/presto 反之亦然 - 内部

RewriteEngine ON
RewriteCond %REQUEST_FILENAME.php -f
RewriteRule ^(.*)$ $1.php [NC,L]

没有任何效果 - 网址保持不变 通过右键单击按钮 Reload 并选择 - Empty Cache and Hard Reload 重新加载页面 - 所以我希望缓存被清除

此处的示例 - here

【问题讨论】:

为什么 URL 会改变?你不做任何重定向,只是重写。为什么应该改变呢?重点是您可以拥有一个由/stuff.php 内部提供的类似https://example.com/stuff 的URL(客户端甚至根本看不到任何.php)。我认为你搞错了 - 根本不要将人们发送到/presto.php,而是将他们链接到/presto... @CherryDT - 如果我还有一个名为 presto 的文件夹怎么办? 这将是一个令人困惑的语义结构...... @CherryDT - 好吧,假设没有这样的文件夹。您确定没有文件扩展名的链接将始终指向该文件吗?我认为这不是默认或常规浏览器的行为 不,这不是默认设置,而是您在上面显示的.htaccess 实现的...也许我误解了这里的意思。我在想你想要没有.php 的漂亮URL,所以你要做的是使用上面发布的.htaccess 设置,这样/abc 将在内部到达/abc.php。其他任何事情对我来说都没有多大意义。如果不是这样,您能否更好地解释您想在这里实现什么,为什么? 【参考方案1】:

使用您显示的示例,请尝试遵循 htaccess 规则文件。

请确保在测试您的 URL 之前清除您的浏览器缓存。

RewriteEngine ON
RewriteBase /

RewriteCond %ENV:REDIRECT_STATUS ^$
##using THE_REQUEST variable for condition check.
RewriteCond %THE_REQUEST \s/([^.]*)\.php/?\s [NC]
##Performing external redirect here.
RewriteRule ^  %1? [R=301,L]

##Performing rewrite for non-existing pages.
RewriteCond %REQUEST_FILENAME !-f
RewriteCond %REQUEST_FILENAME !-d
RewriteCond %DOCUMENT_ROOT/$1.php -f
RewriteRule ^(.*)/?$ /$1.php [QSA,L]

【讨论】:

谢谢,url 已重写,但我收到错误 404 - Not Found @qadenza,能否请您告诉我您的 htaccess 在哪里以及您的 php 文件在哪里? 实时地址 - ht.abuena.net/presto.php。 htaccess 文件位于 root 和 presto.php 中 @qadenza,你能尝试一次编辑规则吗?请确保在测试您的网址之前清除缓存。 我做到了,它有效,非常感谢您的耐心等待【参考方案2】:

如果项目是核心 PHP 项目,我在 .htaccess 文件中使用以下行:

RewriteEngine on
RewriteCond %REQUEST_FILENAME !-d
RewriteCond %REQUEST_FILENAME\.php -f
RewriteRule ^(.*)$ $1.php [NC,L]

【讨论】:

对我不起作用。没有重定向。是的 - 这是一个纯 php 网站 在您的服务器的 httpd.conf 文件中检查 AllowOverride 条目。它应该是 AllowOverride All 我试图在服务器上找到该文件 - 在 cpanel 文件管理器中 - 没有成功 @qadenza “没有重定向。” - 没错。在正常情况下不应该有重定向。如果旧 URL 已被搜索引擎编入索引或被外部第三方链接,您将只实施重定向(这将是一个附加规则)。您应该已经更改了所有内部链接(在您的 html 源代码中)以引用无扩展名 URL - 因此在正常使用情况下,不需要重定向。 @qadenza 不是真的,对不起。 Apache 文档是我的首选,但它们相当缺乏示例。您在这里处理的是 mod_rewrite - 它只是众多 Apache 模块之一。它是更复杂(也更强大)的 Apache 模块之一。见:httpd.apache.org/docs/2.4/rewrite

以上是关于htaccess - 从 url 中删除 .php 扩展名的主要内容,如果未能解决你的问题,请参考以下文章

htaccess 从 url 中删除 index.php

从 url (codeigniter) 中删除 index.php 时 .htaccess 防止显示文件

使用 .htaccess 从 URL 中删除“/php/”子目录

代码点火器 | .htaccess 从 url 中删除 index.php

htaccess 帮助,从 URL 中删除一个字符串

使用htaccess从url中删除“index.php?access =”