我尝试了如下命令
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>
包装器)