从子目录中的 URL 中删除 .php

Posted

技术标签:

【中文标题】从子目录中的 URL 中删除 .php【英文标题】:Remove .php from URL in subdirectory 【发布时间】:2019-03-08 16:28:21 【问题描述】:

在运行 apache 2.4 和 DirectAdmin 的 CentOS 6 上,我有一个 wordpress 网站。除了 wordpress 标准架构之外,我还想要一些位于子目录中的半静态页面。

文件系统为:/home/user/public_html/sub/static1.php

所需网址为:https://domain/sub/static1

目前我打开带有.php 扩展名的页面没有问题。但我想删除它。我尝试在.htaccess 中添加一些重写规则,但由于请求被重定向到主页,所以我失败了。

我试图在网上找到一些解决方案,包括这个网站,但没有任何帮助。我认为 DirectAdmin 涉及此问题。

任何帮助将不胜感激

【问题讨论】:

【参考方案1】:

在您的 /home/user/public_html/sub/.htaccess 文件中,使用以下代码:

Options -MultiViews
RewriteEngine on

# remove php
RewriteCond %REQUEST_METHOD !POST
RewriteCond %REQUEST_URI !/index\.php$
RewriteCond %THE_REQUEST ^[A-Z]3,\s([^.]+)\.php [NC]
RewriteRule ^ %1 [R=301,L]

# rewrite with php php
RewriteCond %REQUEST_FILENAME !-d
RewriteCond %DOCUMENT_ROOT/sub/$1.php -f
RewriteRule ^(.+?)/?$ $1.php [L]

【讨论】:

它的工作预期有两件事:第一:在最后一个 RewriteCond 中,我需要在文档根目录之后包含/sub,第二:我现在遇到了/sub/index.php 的问题。它被重定向到/sub/index 并给我 404。我禁用了与重定向相关的所有行。但它仍然会发生。 我更改了我的答案而不重定向 index.php 它仍然被重定向到index。我暂时编辑了所有指向index.php 的链接以避免收到 404。我自己尝试了几种规则来避免这种情况,但都失败了。 你的缓存有问题。清除缓存或尝试使用其他浏览器 没有区别。我尝试了 Firefox 私人模式和铬隐身模式。结果相同。【参考方案2】:

您可以使用 Apache mod_rewrite

只需将此代码添加到您的根目录 .htaccess

RewriteCond %REQUEST_FILENAME.php -f
RewriteRule !.*\.php$ %REQUEST_FILENAME.php [QSA,L]

【讨论】:

以上是关于从子目录中的 URL 中删除 .php的主要内容,如果未能解决你的问题,请参考以下文章

从子文件夹中删除前两个条目,阅读php脚本

.htaccess 从子目录重写到根目录

使用 php 从子目录中获取 azure blob 文件

删除 URL 中的最后一个目录

从子字符串结果中删除可能的尾随空格

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