【发布时间】:2011-09-08 18:08:50
【问题描述】:
我正在开发一个新项目,我想通过使用 2 级文件夹来提高安全性。 “Core”文件夹包含所有文件夹,包括“public”文件夹,该文件夹必须是访问者可以访问的唯一文件夹。
关于我的 webdir 的简短介绍:
网络目录
| - .htaccess(核心)
| - 课程
| - 职能
| - 民众
| - .htaccess(公共)
| -CSS
| - 文件
| - 德
| - zh
| - 一般的
| -nl
| - 图片
| - 索引.php
| - js
| - 瑞士法郎
| - 模板
供您参考:
- 我的 public/index.php 文件通过 [geturl] 和 [section] 整理出文件位于哪个部分。请求“http://example.com/nl/openfile”指向:
public/index.php
- 此文件读取 $_GET 并在 [section] "nl" 中看到 [geturl] 是 "openfile"
public/index.php要打开:“files/nl/openfile.php”
- 这就是它的工作原理,我希望它能够工作!
我想用我的 .htaccess 实现以下目标:
- 该网站支持 3 种语言:en/de/nl。如果未设置语言,则 nl 语言应为默认语言。
- http://example.com/nl/contact需要定位文件:public/files/nl/contact.php
- 目前,当访问者输入http://example.com/nl/css(没有尾部斜杠,添加尾部斜杠时不会出现问题)时,服务器会将其转换为http://example.com/public/css/?section=nl。 这对访问者来说信息太多了。我不希望用户看到文件的位置。
- 不应直接访问公用文件夹。因此,当用户输入 http://example.com/public 时,应将其重定向到 http://example.com/nl/
我当前的 .htaccess 文件:
.htaccess(核心)
<IfModule mod_rewrite.c>
RewriteEngine on
Options +FollowSymLinks
Options -Indexes
RewriteCond %{HTTP_HOST} ^customer.com$ [NC]
RewriteRule ^(.*)$ http://www.customer.com/$1 [R=301,L]
RewriteRule ^company(.*)$ public/$1?section=company [L]
RewriteCond %{QUERY_STRING} (.*)
RewriteRule !(nl|en|de)/(.*).* /webdir/nl/ [R=301,L] # IF NO LANG ISSET THAN NL REDIRECT
RewriteRule ^error(.*).* public/?getpage=error&%1 [PT,L]
RewriteRule ^(nl|en|de)/(.*).* public/$2?section=$1&%1 [L]
</IfModule>
.htaccess(公共)
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{QUERY_STRING} (.*)
RewriteRule ^(.*).* index.php?geturl=$1&%1 [PT,L]
</IfModule>
我做错了什么以及如何改进 .htaccess 文件?
总结一下,我希望 .htaccess 执行以下操作:
- 该网站支持 3 种语言:en/de/nl。如果未设置语言,则 nl 语言应为默认语言。
- http://example.com/nl/contact需要定位文件:public/files/nl/contact.php
- 目前,当访问者输入http://example.com/nl/css(没有尾部斜杠,添加尾部斜杠时不会出现问题)时,服务器会将其转换为http://example.com/public/css/?section=nl。 这对访问者来说信息太多了。我不希望用户看到文件的位置。
- 不应直接访问公用文件夹。因此,当用户输入 http://example.com/public 这应该被重定向到 http://example.com/nl/
【问题讨论】:
标签: php security .htaccess mod-rewrite directory