防止加载文件扩展名为.php的页面(仅在没有文件扩展名的情况下加载)


Prevent loading pages with .php file extension (only load without it)

我的.htaccess文件中有一个重写条件,它消除了对文件扩展名.php的需要

RewriteEngine On
RewriteRule ^([^.]+)$ $1.php

所以 http://site.com/blog 打开 http://site.com/blog.php

但如果老用户键入/blog.php它也会加载页面

有没有办法防止将具有.php或任何其他文件扩展名的页面重定向到没有它的页面?

我的意思是,如果用户输入/blog.php 或/blog.asp它应该无法加载或重定向到/blog(不带扩展名)

实现此目的的更好方法是仅在存在该名称的.php时才重写。否则,请为原始 URL 抛出404。第二组规则将负责删除扩展并避免重定向循环。

Options +FollowSymLinks -MultiViews
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME}'.php -f
RewriteRule ^(.*)$ $1.php [L]
RewriteCond %{THE_REQUEST} ^(?:GET|POST)' /.*'.php' HTTP.*$ [NC]
RewriteRule ^(.*)'.php$ $1 [R=301,L]
RewriteEngine On
RewriteRule ^([^.]+)$ $1.php [L]
RewriteRule ^(.*?)'.php$ $1 [R=301,L]
您可以使用

该规则

RewriteRule ^(.+)'.php$ $1 [R=301,L]

这将导致 apache 发回重定向到浏览器,该浏览器会将其 URL 更新为从扩展中删除的 URL。但请确保将此规则放在重定向到的内部.php规则的前面

试试这个:

RewriteRule ^(.*?)'.([a-z0-9]+)$ $1 [R=301,L]