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

4
我尝试了很多代码来从URL中去除.php,例如:ht.abuena.net/presto.php -> ht.abuena.net/presto,以及反过来 - 在内部进行。
RewriteEngine ON
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.*)$ $1.php [NC,L]

什么都不起作用 - url 保持不变
通过右键单击按钮 重新加载 并选择 - 清空缓存并强制重新加载 来重新加载页面 - 所以我希望缓存被清除了

实时示例在此处 - 这里


1
为什么 URL 会改变?你没有进行任何重定向,只有重写。而且它为什么需要改变?整个意图是,你可以将 URL https://example.com/stuff 在内部由 /stuff.php 提供服务(甚至客户端根本看不到.php)。我认为你弄反了——根本不要链接到/presto.php,而是链接到/presto... - CherryDT
1
那将是一个令人困惑的语义结构... - CherryDT
@CherryDT - 好的,假设没有这样的文件夹。你确定没有文件扩展名的链接总是指向该文件吗?我认为这不是默认的或常规的浏览器行为。 - qadenza
不,这不是默认设置,但它是你上面展示的.htaccess实现的效果...也许我误解了重点。我认为你想要没有.php的漂亮URL,所以你需要使用你上面发布的.htaccess设置,这样/abc就会内部到达/abc.php。其他任何事情对我来说都没有太多意义。如果不是这种情况,你能更好地解释一下你想要在这里实现什么吗?为什么? - CherryDT
@CherryDT - 是的,目标是美化URL。我只是不确定如何编写没有文件扩展名的链接,这似乎是一个棘手的解决方案。 - qadenza
显示剩余9条评论
2个回答

5

根据您提供的示例,请尝试以下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]

@qadenza,请问您的htaccess文件和php文件分别在哪里? - RavinderSingh13
现场地址-https://ht.abuena.net/presto.php。.htaccess文件位于根目录中,presto.php也在其中。 - qadenza
请尝试在提供的地址上自己实现,返回相同的结果。 - qadenza
@qadenza,不知道为什么那个链接无法使用,所以我无法测试。我做了一个小改动,请尝试一下,看看效果如何。 - RavinderSingh13
@qadenza,请现在尝试我的编辑规则并告诉我它的效果如何。 - RavinderSingh13
显示剩余8条评论

1
在我的情况下,如果项目是核心PHP项目,我会在.htaccess文件中使用以下行:
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php [NC,L]

对我不起作用。没有重定向。是的 - 这是一个纯php网站。 - qadenza
请检查您服务器的httpd.conf文件中的AllowOverride条目。它应该是AllowOverride All。 - Phan Hero
我正在尝试在cpanel文件管理器中查找服务器上的那个文件,但没有成功。 - qadenza
@qadenza "没有重定向。" - 这是正确的。在正常情况下,不应该有重定向。只有在旧的URL被搜索引擎索引或被外部第三方链接到时,才会实现重定向(这将是一个额外的规则)。您应该已经更改了所有内部链接(在HTML源代码中)以引用无扩展名的URL-因此,在正常使用情况下,不需要重定向。 - MrWhite
1
@qadenza 不是很清楚,抱歉。Apache文档是我的首选,但是它们在示例方面相当缺乏。你正在处理的是mod_rewrite - 这只是许多Apache模块之一。它是更复杂(和强大)的Apache模块之一。请参见:https://httpd.apache.org/docs/2.4/rewrite/ - MrWhite
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接