从php网站的url中删除文件夹结构

时间:2012-10-01 15:40:18

标签: php .htaccess mod-rewrite url-rewriting wampserver

我的php网站有以下文件夹结构(基本结构)。

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

因此,当我在WAMP中查看index.php时,网址为http://localhost/project_name/

但是当我进入网站(例如,位于视图文件夹下的login.php)时,url就是这样的。 http://localhost/project_name/app/view/login.php

我发现使用.htaccess我们可以更改网址。所以我尝试了这个(在.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]

现在网址为http://localhost/project_name/login.php这是正确的。但似乎php没有使用原始链接来抓取文件(即来自/project_name/app/view/login.php)但是从这里/project_name/login.php

因此它会抛出404错误。

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

希望我的问题足够明确。非常感谢任何帮助!

1 个答案:

答案 0 :(得分:0)

在htaccess文件中通过重写规则传递的URI删除了前导斜杠,因此您的规则:

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]