【问题标题】:.htaccess: Hide existing files but use them through RewriteRule.htaccess:隐藏现有文件,但通过 RewriteRule 使用它们
【发布时间】:2012-12-30 01:48:49
【问题描述】:

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

【问题讨论】:

  • ¿certain URL format 究竟如何?如果可能,使用突出显示与其余 URL 差异的描述,指定哪些段是固定字符串,哪些是可变的?这些信息对于更好地了解您想要什么很重要。
  • “格式”部分之一是必须使用域部分之后的页面名称来访问页面,例如example.com/thispage - 请求真实文件会导致错误(丢失)。

标签: .htaccess mod-rewrite


【解决方案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]

【讨论】:

    猜你喜欢
    • 2014-07-24
    • 2011-03-28
    • 2011-04-12
    • 2010-11-25
    • 1970-01-01
    • 2020-07-05
    • 1970-01-01
    • 2015-08-17
    • 1970-01-01
    相关资源
    最近更新 更多