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

标签 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(没有扩展名)

最佳答案

实现此目的的更好方法是仅在存在具有该名称的 .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]

关于php - 防止加载带有 .php 文件扩展名的页面(仅在没有它的情况下加载),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19606787/

相关文章:

php - 如何在没有尾部斜杠的情况下访问目录的index.php并且不获得301重定向

security - 使用 .htaccess 文件保护网站目录安全吗?

html - 使用 htaccess 处理 DDos?

Apache 错误 "AliasMatch not allowed here"

php - 我可以在使用 htaccess RewriteRule 时通过 URL 传递变量吗?

PHP MySQL 查询与链接表

php - 设置 MySQL php artisan migrate - SQLSTATE[HY000] [2002] 没有这样的文件或目录

php - 更新 CakePHP - 在此服务器上找不到请求的 URL

php - laravel - 如何在 Controller 中实现Heartland支付方式

php - 来自数据库的随机图像,带有 id 的链接