我已经尝试了几种方法,在这里阅读了很多示例和问题,但仍然无法弄清楚它是否根本无法完成。
我想要的是使用某种 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(存在),他们将不会收到它。