2012-10-01 46 views
0

我有一个php网站有以下文件夹结构(基本结构)。从php网站的url中删除文件夹结构

  • PROJECT_NAME
    • 应用
      • 控制器
      • 模型
      • 视图
    • CSS
    • JS
    • IMG
    • 的index.php

所以,当我在WAMP查看index.php文件的URL为http://localhost/project_name/

但是,当我去工地内(例如: login.php位于视图文件夹下)url就像这样。 http://localhost/project_name/app/view/login.php

我发现,使用的.htaccess我们可以改变的URL。所以我尝试了这个(在.htaccess中)。

RewriteEngine on 
RewriteBase/
Redirect 301 /project_name/app/view/login.php /project_name/login.php 
RewriteRule ^/project_name/login.php$ /project_name/app/view/login.php [L] 

现在url是http://localhost/project_name/login.php这是正确的。但它似乎PHP不使用原始链接来抓取文件(即从/project_name/app/view/login.php),但从这里/project_name/login.php

因此,它会引发404错误。

我应该改变什么?请帮助我,我只是想从url中隐藏/app/view/部分,以便用户不会看到我的文件夹结构。我已阅读了大约9小时的各种方式,但仍然无法正常工作。

希望我的问题很清楚。任何帮助是极大的赞赏!

+2

你不应该直接无论如何..你要么链接控制器或有得到控制路由器使用基于链接到的意见请求 –

+0

我使用控制器访问模型并基于从模型中获取的数据创建动态页面。控制器中的功能是完成最终查看页面的功能。你能解释如何以你说的方式做它,它隐藏/ app/view /我的网址的一部分? – pabz

+0

通常,整个'app'文件夹将完全脱离文档根目录,您将通过'index.php'完成所有工作,这将检查路径并包含它需要显示/处理的文件。 –

回答

0

的URI通过一个htaccess文件重写规则通过拥有领先的斜杠去掉,这样您的规则:

RewriteRule ^/project_name/login.php$ /project_name/app/view/login.php [L] 

永远不会匹配,因为^/什么。此外,由于您正在重写为符合之前重定向的URI,因此您的浏览器将看到一个重定向循环,并说它没有正确重定向。你需要来匹配实际的请求,而不是URI:

RewriteEngine on 
RewriteBase/

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /project_name/app/view/login\.php 
RewriteRule^/project_name/login.php [L,R=301] 

RewriteRule ^/?project_name/login.php$ /project_name/app/view/login.php [L] 
+0

上面的.htaccess代码没有隐藏'/ app/view /',但创建了一个重定向循环,浏览器说它不是正确重定向。所以它不起作用。但是我之前的代码并没有这样做。它只是给了404未找到错误,因为现在URL已更改。所以我认为在这个.htaccess中有一些错误。我是这些东西的新手。但我已经与框架一起工作了,就像@Seth所说的那样,这个URL改变了事物。所以我想学习如何在我自己的小型框架/网站中做到这一点。有没有人知道一个很好的参考来学习这些东西? – pabz

+0

@pabz抱歉,第一条规则与'%{THE_REQUEST}'匹配时出现复制粘贴错误。 –

+0

Thnx @Jon Lin但现在它给了404错误。它为什么说'在这个服务器上没有找到请求的URL /project_name/login.php'。我需要在/project_name/login.php中创建一个符号链接(链接到/ project_name/app/view/login。 PHP)? – pabz