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 扩展名的主要内容,如果未能解决你的问题,请参考以下文章
从 url (codeigniter) 中删除 index.php 时 .htaccess 防止显示文件
使用 .htaccess 从 URL 中删除“/php/”子目录