5

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

4 回答 4

4

完成此操作的更好方法是仅在.php存在该名称的 a 时进行重写。否则抛出404原始 URL。第二组规则将负责删除扩展并避免重定向循环。

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]
于 2013-10-26T12:57:19.203 回答
1
RewriteEngine On
RewriteRule ^([^.]+)$ $1.php [L]
RewriteRule ^(.*?)\.php$ $1 [R=301,L]
于 2013-10-26T12:41:03.480 回答
0

尝试这个:

RewriteRule ^(.*?)\.([a-z0-9]+)$ $1 [R=301,L]
于 2013-10-26T12:44:13.013 回答
0

你可以使用规则

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

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

于 2013-10-26T12:41:59.647 回答