如何在PHP中隐藏文件扩展名?



我尝试了如下命令

RewriteRule ^(.*?)/(.*?)/(.*?)$ $1.php?$2=$3 [L]

在。htaccess隐藏php扩展从URL,但不工作,我有以下site.org/home.php,我想要它site.org/home,我怎么能做到这一点?是否有可能做到这一点,而不修改。htaccess文件,以及?

我也在。htaccess文件中尝试了这个,但是不工作

<IfModule mod_rewrite.c>
RewriteEngine  on
RewriteRule ^(.*)$ $1.php
</IfModule>

你实际上没有"hide"扩展使用.htaccess(如果这是你所期望的)。您必须首先删除HTML源代码中的.php扩展名,在您的内部链接中(Apache/.htaccess不应用于此操作)。扩展现在是"隐藏"的。(但链接不起作用)。

然后使用.htaccess在内部将无扩展URL重写为.php扩展,以使URL"工作"。

例如:

RewriteEngine On
# Rewrite to append ".php" extension if the file exists
RewriteCond %{DOCUMENT_ROOT}/$1.php -f
RewriteRule (.+) $1.php [L]

给定对/home的请求,如果home.php作为物理文件存在于文档根目录中,则上述代码将在内部重写对/home.php的请求。

注意,此规则假定url不以斜杠结尾。如。它期望/home而不是/home/。如果您请求/home/,那么它将导致404,因为/home/.php不存在。

上述条件在重写请求之前首先检查请求的URL +.php是否作为物理文件存在。这是必要的,以防止重写循环(500错误)。

如果您的url不包含点(否则用于分隔文件扩展名),则可以通过排除匹配url路径中的点来优化上述内容。ie。将RewriteRule模式(.+)更改为^([^.]+)$。这避免了您的静态资源(.css,.js,.jpg等)被不必要地检查相应的.php文件。

如果您正在更改以前使用.php扩展的现有URL结构,并且这些URL已被搜索引擎索引和/或被第三方链接,那么您还应该重定向包含.php的请求,以保持SEO。这个重定向应该放在上面重写的之前,紧跟在RewriteEngine指令之后:

# Redirect to remove ".php" extension
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteRule (.+).php$ /$1 [R=301,L]

前面的条件检查REDIRCT_STATUS环境变量,确保只有直接请求被剥夺.php扩展,而不是在以后重写请求时重写请求(否则会导致重定向循环)。

注意:首先使用302(临时)重定向进行测试,以避免潜在的缓存问题。


RewriteRule ^(.*?)/(.*?)/(.*?)$ $1.php?$2=$3 [L]

这比简单的"删除"(或者更确切地说是"追加").php扩展名。

<IfModule mod_rewrite.c>
RewriteEngine  on
RewriteRule ^(.*)$ $1.php
</IfModule>

这将导致重写循环,即:一个500内部服务器错误响应,因为它会重复地将.php扩展名一次又一次地附加到同一个请求。

(不需要<IfModule>包装器)

相关内容

  • 没有找到相关文章

最新更新