我的.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]