我已经尝试了这几种方法,在这里阅读了很多例子和问题,但仍然无法弄清楚它是否完全无法完成。
我想要的是使用某种URL格式强制访问某些文件和函数,并拒绝访问其他所有内容(假404) - 甚至现有的文件/目录。
这部分有效:
RewriteEngine On
RewriteRule ^([\w]+)$ /somefolder/index.php?page=$1 [L]
RewriteRule ^person/([\d]+) /somefolder/index.php?page=person&id=$1 [NC,L]
RewriteRule ^css/([\w]+\.css) /somefolder/css/$1 [NC,L]
RewriteRule ^images/([\d]{4}-[\d]{2}-[\d]{2}/[\d]+\.(gif|jpe?g)) /somefolder/images/$1 [NC,L]
但是,以下行会导致500内部服务器错误:
RewriteRule ^(.*)$ /somefolder/index.php?page=error [R=404]
我希望如果访问者请求/somefolder/index.php(或者可能存在或可能不存在的任何其他文件/目录),它应该返回404和错误页面。我还计划稍后添加:
ErrorDocument 404 /somefolder/index.php?page=error
.htaccess文件位于根目录中。这可行吗?
示例:
(用户访问并链接到其他页面的页面)
http://example.com/breakfast - > http://example.com/somefolder/index.php?page=breakfast
(页面使用的样式表)
http://example.com/css/default.css - > http://example.com/somefolder/css/default.css
(文件中使用的图像)
http://example.com/images/2011-01-01/test.jpg - > http://example.com/somefolder/images/2011-01-01/test.jpg
(其他一切)
http://example.com/this/may.exist - > 404 +错误页面
..这意味着如果有人试图获得http://example.com/somefolder/css/default.css(存在),他们就不会收到它。
答案 0 :(得分:1)
这就是我想要的;它拒绝直接访问所有php文件,但允许它们通过快捷方式运行:
ErrorDocument 403 /index.php?page=error
ErrorDocument 404 /index.php?page=error
RewriteEngine On
RewriteRule ^$ /index.php?page=start [L]
RewriteRule ^([\w]+)$ /index.php?page=$1 [L]
<Files ".ht*">
Order Allow,Deny
</Files>
<Files "*.php">
Order Deny,Allow
Deny from All
Allow from env=REDIRECT_STATUS
</Files>
这会导致500错误,因为(我认为)它会创建一个无限循环 - 每次重写时,都会再次处理htaccess文件:
RewriteRule ^(.*)$ /somefolder/index.php?page=error [R=404]