【问题标题】:.htaccess rewrite specific requests to a sub-directory page.htaccess 将特定请求重写到子目录页面
【发布时间】:2016-03-31 05:54:05
【问题描述】:

我正在尝试学习如何正确制作 CMS,但遇到了一些问题。

文件夹结构:

根目录:(名为 learnCMS 的文件夹) 管理员(目录) 索引.php js(目录) css(目录) 索引.php .htaccess

这一切都在 WAMP 上,所以我的域是 localhost/learnCMS/

现在,我正在尝试制作一个 .htaccess 文件,为这个“域”制定重写规则。到目前为止,我只需要两条规则,但我无法让其中一条起作用,这就是我要问的原因。基本上我需要一个规则来“重定向”任何访问,如下所示: domain/admin+[anystring] 到子目录的 index.php。基本上是这样的:

  1. domain/[anything] 会转到 root 的 index.php
  2. domain/admin[anything] 将转到 root/admin/index.php

catch 是,它不能是完整路径,所以我不能写 D:/wamplocation/www/learnCMS/admin/

这是我的 .htaccess 和一次徒劳的尝试,我收到一条错误消息:
"在此服务器上找不到请求的 URL /admin/index.php。"

重写引擎开启 RewriteRule ^admin /admin/index.php [QSA,L] RewriteRule ^([^./]{3}[^.]*)$ index.php?page=$1 [QSA,L]

附言我是初学者,如果可能的话,如果您能以通俗易懂的方式进行解释,我将不胜感激。

【问题讨论】:

    标签: php regex .htaccess url-rewriting


    【解决方案1】:

    严格来说localhost 是您的域,而不是localhost/learnCMS。根据您告诉我们的内容,您的 Web 服务器的文档根目录是 learnCMS 目录的 parent 目录。我暂时叫它/path/to/parent

    对于绝对 URI(以 / 开头),Web 服务器通过在文档根之前添加 URI 路径将其转换为文件名。所以/admin/index.php URI 被转换为/path/to/parent/admin/index.php 文件名。正如错误消息所说,这在您的服务器上找不到。

    对于相对 URI(不以 / 开头),Web 服务器在预先挂起文档根之前包含子目录。为此,请使用 ..

    RewriteRule ^admin admin/index.php [QSA,L]
    

    (删除了/admin/index.php 中的/

    【讨论】:

    • 您好,感谢您的回答,我一回到家就会检查它,尽管我很确定我尝试过并且得到了完全相同的错误。我什至尝试做 /learnCMS/admin/index.php 在这种情况下给出的错误是:找不到文件 learnCMs/learnCMs/admin/index.php。但是让我重新检查一下,以便 100% 确定这一点。我一回家。
    • 出差回家,试了一下。没用。不知道是什么问题,谢谢尝试!编辑:当我尝试“重新做”时它起作用了,显然文件由于某种原因没有保存在服务器上!感谢您的回答。它现在正在工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-06-19
    • 1970-01-01
    • 1970-01-01
    • 2013-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多