【问题标题】:Remove in between folder structure from the url in a php website从 php 网站的 url 中删除文件夹结构之间
【发布时间】:2012-09-22 11:49:03
【问题描述】:

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

  • 项目名称
    • 应用程序
      • 控制器
      • 型号
      • 查看
    • 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]

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

所以它会抛出 404 错误。

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

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

【问题讨论】:

  • 无论如何你都不应该直接链接到视图。你要么链接到控制器,要么有一个路由器根据请求让控制器使用
  • 我使用控制器来访问模型并根据从模型中检索到的数据创建动态页面。控制器中的功能是完成最终视图页面的功能。您能解释一下如何按照您所说的方式进行操作吗?它是否会从我的网址中隐藏 /app/view/ 部分?
  • 通常整个app 文件夹将完全不在文档根目录中,您将通过index.php 执行所有操作,这将检查路径并包含它需要显示/处理的文件。
  • 好的..谢谢。我会试试的。但它不会减慢网站速度吗?除此之外,您如何使用 .htaccess 更改用户看到的 url?
  • 可能会使网站变慢一点,但我怀疑你会注意到。您不必使用.htaccess,只需将所有内容路由到index.php,它就会照顾您。

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


【解决方案1】:

通过 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]

【讨论】:

  • .htaccess 上面的代码没有隐藏/app/view/,而是创建了一个重定向循环,浏览器说它没有正确重定向。所以它没有用。但是我之前的代码没有做这样的事情。它只是给出了 404 Not Found 错误,因为现在 URL 已更改。所以我认为这个给定的.htaccess 中有一些错误。我是这些东西的新手。但是我已经使用框架来修改这个 url,就像@Seth 说的那样。所以我想学习如何在我自己的小框架/站点中做到这一点。有人知道学习这些东西的好参考吗?
  • @pabz 抱歉,与%{THE_REQUEST} 匹配的第一条规则出现复制粘贴错误。
  • Thnx @Jon Lin 但现在它给出了 404 错误。为什么它说The requested URL /project_name/login.php was not found on this server. 我需要在/project_name/login.php 中创建一个符号链接(链接到/project_name/app/view/login.php)吗?
猜你喜欢
  • 1970-01-01
  • 2015-10-30
  • 1970-01-01
  • 2023-04-04
  • 1970-01-01
  • 2014-07-24
  • 2016-10-27
  • 2017-04-07
  • 1970-01-01
相关资源
最近更新 更多