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

时间:2013-10-26 12:37:33

标签: php .htaccess

我的.htaccess文件中有重写条件,无需.php文件扩展名

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

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

但如果旧用户输入/blog.php,它也会加载页面

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

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

4 个答案:

答案 0 :(得分:3)

实现此目标的更好方法是仅在存在该名称的.php时重写。否则抛出原始网址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]

答案 1 :(得分:1)

RewriteEngine On
RewriteRule ^([^.]+)$ $1.php [L]
RewriteRule ^(.*?)\.php$ $1 [R=301,L]

答案 2 :(得分:0)

您可以使用规则

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

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

的规则之前

答案 3 :(得分:0)

试试这个:

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