如何使用mod_rewrite只允许没有.php扩展名的文件

时间:2014-05-28 19:28:38

标签: apache .htaccess mod-rewrite

我在.htaccess-File中使用此代码重写例如/ home to /home.php

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.php [NC,L]

但是如何在服务器获取/home.php请求的同时执行此操作 重写它,以便找不到该文件。我只想允许访问/ home和 不使用/home.php但仍然使用带扩展名的文件。

使用此.htaccess一般有效:

ErrorDocument 404 /404_error.php

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.php [NC,L]

RewriteCond %{THE_REQUEST} \.php[\s?/] [NC]
RewriteRule \.php$ - [NC,R=404,L]

但是当应该抛出404的请求使用例如/自定义404错误页面被加载时。但是使用/whatever.php我得到了这个:

The requested URL /test/whatever.php was not found on this server.

Additionally, a 500 Internal Server Error error was encountered while trying to use an
ErrorDocument to handle the request.

知道如何解决这500错误吗?

P.S。:没有php-extension同样的事情“ErrorDocument 404 / 404_error”

1 个答案:

答案 0 :(得分:1)

您可以使用此规则阻止.php次请求:

RewriteCond %{THE_REQUEST} \.php[\s?/] [NC]
RewriteRule \.php$ - [NC,R=404,L]