使用htaccess将PHP文件名重写为cgi,并拒绝访问php文件

时间:2012-12-08 14:41:47

标签: php .htaccess

我用以下htaccess代码重写了php文件的文件名:

ErrorDocument 404 /notfound.html

AddType application/x-httpd-php .cgi
RewriteEngine on 
RewriteCond %{QUERY_STRING} mosConfig_[a-zA-Z_]{1,21}(=|\%3D) [OR]
RewriteCond %{QUERY_STRING} base64_encode[^(]*\([^)]*\) [OR]
RewriteCond %{QUERY_STRING} (<|%3C)([^s]*s)+cript.*(>|%3E) [NC,OR]
RewriteCond %{QUERY_STRING} GLOBALS(=|\[|\%[0-9A-Z]{0,2}) [OR]
RewriteCond %{QUERY_STRING} _REQUEST(=|\[|\%[0-9A-Z]{0,2})

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php [F,L]
RewriteRule ^(.*)\.cgi $1\.php 

我想做什么: 我是否也可以限制对php文件的访问?例如,如果访问者希望看到page.php获得404错误,并且想要查看main.cgi页面时可以看到该页面没有错误,是否可以?
如果我不能用htaccess做到这一点,那么最好的解决方案是什么?

1 个答案:

答案 0 :(得分:1)

你可以通过公共文件夹之外的php文件来实现你想要的,而不是让你的index.php文件包含它们

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php [F,L]

和index.php中的内容类似

$validFiles = array('page', 'about', 'gallery');

$requestedFile = str_replace('.cgi', '', trim($_SERVER['REQUEST_URI'], '/');

if(in_array($requestedFile, $validFiles ))
{
    // ../ goes into the parent folder, and code is a sibling of your public folder
    include '../code/'.$requestedFile.'.php';
}
else
{
    // file not found stuff or index here
}

虽然我会质疑为什么你需要使用.cgi扩展名,这是与你的主机有关,还是遗留的要求?因为使用htaccess,你可以拥有像

这样的干净网址

mydomain.com/products/widget /