我尝试搜索,但是找不到有效的解决方案。
我想删除.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]
有人知道如何使它工作吗?
答案 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
模式中捕获组的“关于”或“联系人”。