我试图仅在我的网站上删除特定文件的文件扩展名(在本例中为.php)。当有人访问指向该页面的链接时,我希望在没有扩展名的情况下显示该页面。
例如,我希望www.mysite.com/calendar.php显示为www.mysite.com/calendar,访问主页时仍然可以访问www.mysite.com/index.php
问题是我只希望这适用于网站上的特定网页,而不是整个网站。
我尝试了一些我发现的变体(有些变种,有些变种来自外部网站),似乎没有任何变化。
这个例子:
Options -MultiViews
RewriteEngine On
# To externally redirect /calendar.php to /calendar
RewriteCond %{THE_REQUEST} \s/+(calendar)\.php[\s?] [NC]
RewriteRule ^ /%1 [R=302,L,NE]
# To internally forward calendar to calendar.php
RewriteRule ^(calendar)/?$ $1.php [L,NC]
似乎没有扩展名(www.mysite.com/calendar)强制页面转到网址。但是,只需访问www.mysite.com/calendar即可。
下一个例子:
Options -MultiViews
RewriteEngine On
# To externally redirect /calendar.php to /calendar
RewriteCond %{REQUEST_URI} calendar.php
RewriteRule ^(.*)$ /calendar [L,R=302,NC]
# To internally forward calendar to calendar.php
RewriteRule ^(calendar)/?$ $1.php [L,NC]
似乎可以在不使用扩展名的情况下显示url,但会导致ERR_TOO_MANY_REDIRECTS错误,因为它似乎正在循环播放。
我觉得我很接近,但不能让它正常工作。我非常希望能够在网站上的一些页面上做到这一点。
修改
正如anubhava在评论中所建议的那样,我将第一个例子更新为:
Options -MultiViews
RewriteEngine On
# To externally redirect /calendar.php to /calendar
RewriteCond %{THE_REQUEST} /(calendar)\.php[\s?] [NC]
RewriteRule ^(.*)$ /q90fm-2017/calendar [L,R=302,NC]
# To internally forward calendar to calendar.php
RewriteRule ^(calendar)/?$ $1.php [L,NC]
现在它完美无缺!
答案 0 :(得分:0)
将我的评论翻译为答案,以便它可以帮助遇到类似问题的人。
问题是.htaccess位于子目录内,而不是直接位于站点根目录下。这就是123
在上面的\s/+
中不匹配的原因。
我建议遵循以下规则来避免硬编码子目录:
RewriteCond