从特定的URL删除.php扩展名

时间:2019-06-25 17:47:25

标签: php .htaccess mod-rewrite

我尝试搜索,但是找不到有效的解决方案。

我想删除.php扩展名,并从特定的URL(about.php)中添加斜杠。

例如...

www.example.com/about.php应该重定向到www.example.com/about/

www.example.com/about应该重定向到www.example.com/about/

我在RewriteRule中尝试了各种.htaccess,但没有一个能按我需要的方式工作。

下面添加了斜杠,我可以不扩展而访问页面...但是.php版本仍然显示。

RewriteEngine On
RewriteBase /
RewriteRule ^about/$ about.php [END,QSA,NC]

有人知道如何使它工作吗?

2 个答案:

答案 0 :(得分:1)

您可以改用index.php。 索引页未显示在浏览器地址上。

您可以创建http://www.example.com/about/index.php,然后在浏览器上显示为:

http://www.example.com/about/

如果您需要从http://www.example.com/about.php重定向,我建议您使用标头http-equiv

< meta http-equiv="refresh" content="0; URL='http://www.example.com/about/'" />

答案 1 :(得分:1)

要将/about.php(和/about-不带斜杠)从外部重定向到/about/(以使搜索引擎和可能已索引/链接到旧URL的外部第三方受益),您需要在现有的重写之前添加以下内容

RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteRule ^about(\.php)?$ /about/ [R=302,L]

检查REDIRECT_STATUS环境变量的条件是确保我们仅重定向直接请求,而在以后的重写中尚未将其重写。 REDIRECT_STATUS在初始请求中为空,并且在第一次重写后被设置为HTTP状态(即,成功则为“ 200”)。

RewriteRule 模式匹配/about/about.php,并重定向到/about/

请注意,这是302(临时)重定向。确认后,仅将其更改为301(永久)即可。这是为了避免缓存问题(浏览器永久缓存301)。同样,如果您以前尝试过301s,那么在测试之前,您需要确保已清除浏览器。

  

更新:如果我想对多个页面执行此操作

如果只有两页(如示例/注释中所示),则可以将两个规则合并为一个(而不是复制规则块)。例如:

RewriteEngine On
RewriteBase /

RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteRule ^(about|contact)(\.php)?$ /$1/ [R=302,L]

RewriteRule ^(about|contact)/$ $1.php [END,QSA,NC]

$1后向引用将保留RewriteRule 模式中捕获组的“关于”或“联系人”。