【问题标题】:htaccess redirect to parent folder index.php if does not existhtaccess 重定向到父文件夹 index.php 如果不存在
【发布时间】:2017-07-04 15:28:30
【问题描述】:

我正在通过 php 构建一个 web api。我正在努力解决的一件事是设置 htaccess 文件以在某些内容不存在时重定向到父文件夹的 index.php。我的文件夹结构如下所示:

/SkedApi/
    index.php
    /Users/
        index.php

这是我目前所拥有的,但它不起作用:

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php [NC,L]

目前,如果它不存在,它将一直重定向回/SkedApi/index.php。但是对于/Users/3,我需要它重定向到/Users/index.php/Users/ 工作正常并将其定向到/Users/index.php

【问题讨论】:

    标签: php linux .htaccess


    【解决方案1】:

    你可以使用绝对路径:

    RewriteRule ^Users/(.*)$ /Users/index.php [NC,L] 
    

    为用户和

    RewriteRule ^(.*)$ /index.php [NC,L] 
    

    剩下的。

    评论:如果你想重用它,你需要正则表达式中的括号。像这样:RewriteRule ^User/(.*)$ /User/index.php?uid=$1 [NC,L] 除非你可以选择简单的^User/

    编辑:如果你想实现某种控制器逻辑,你可以用正则表达式捕捉它们。

    考虑到你的控制器是一个词:

    RewriteRule ^([^/]*)/(.*)$ /Users/index.php?mycontroler=$1&mydata=$2 [NC,L] 
    

    当然,如果您的框架直接从查询字符串中获取此信息,您可以省略 $1 $2。

    RewriteRule ^([^/]*) /Users/index.php [NC,L] 
    

    【讨论】:

    • 当然必须有一个通用/更好的方法来解决这个问题。每次添加新控制器时都必须编辑 htaccess 文件似乎很容易出错。
    • @gotoguru,是的,我的框架是从查询字符串中获取的。
    • 是的,我搞砸了正则表达式。第一个吃掉了所有的字符串。固定的。我在这里假设您使用的是单字控制器。
    • @keelerjr12 或者您可能想要,iff 您的控制器目录存在然后重定向到 controller/index.php 否则重定向到 root/index.php?
    猜你喜欢
    • 2016-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-23
    • 2013-04-19
    • 2016-09-27
    • 2015-03-18
    相关资源
    最近更新 更多