繁体   English   中英

如何Mod重写PHP + Slim URL到子目录

[英]how to Mod-rewrite php + Slim url to sub-directory

我正在使用Slim 2.4和php 5.3。 我在本地主机中的目录结构是这样的:

  1. 网络根
    • AppName的
      • API
        • V1
          • 包括
          • Slim <-Slim框架
          • 工具
          • .htaccess(#1)
          • index.php(#1)
      • 资产
        • CSS
        • JS
        • IMG
      • .htaccess(#2)
      • index.php(#2)

我想访问localhost / AppName / v1 ,它将打开localhost / AppName / API / v1 随着其他参数被忽略,此操作部分起作用。 当我尝试获取localhost / AppName / v1 / anyOtherVariable时,它仅打开localhost / AppName / API / v1

现在,#1 index.php包含所有Slim代码(路由和内容),但#1 .htaccess为空。 #2 index.php包含一个简单的静态主页,其中包含一些链接。 在#2 .htaccess中,我写了

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^v1(/.*)?$ API/v1/index.php$1 [QSA,L]
</IfModule>

我真的没有选择。

一种快速而肮脏的解决方案是定义一个版本常量,然后将其从全局变量$ _SERVER ['REQUEST_URI']中删除。 例如,我的api网址是http:// localhost / api / v1 / hello / firstname / lastname

我在定义了一个常量,然后从$ _SERVER ['REQUEST_URI']中将其删除,如下所示:

define('API_VERSION', '/api/v1');

$_SERVER['REQUEST_URI'] = str_replace(API_VERSION, '', $_SERVER['REQUEST_URI']);

$application->get (
    '/hello/:firstname/:lastname',
     ....

它就像一个魅力:)

反复敲击100次后 ,我决定更改目录结构,现在一切正常。 :)我正在发布此答案,以帮助其他人也遇到同样的问题。 这是我的目录结构。

  • Web根目录
    • 应用名称/
      • v0.2 /
      • v0.5 /
      • v0.9 /
        • _APP /
          • 快取/
          • 数据/
          • 库/
          • 供应商/
            • 瘦 /
            • userCake /
            • MeekroDB /
        • 加速/(单独路线)
        • API /
          • 的.htaccess
          • 的index.php
        • 资产/
          • 图片 /
          • CSS /
          • js /
          • 字体/
        • 测试/
        • 的.htaccess
        • 404.php
        • config.php文件
        • 的index.php

现在,这些是我在主文件中使用的代码:API下的index.php包含Slim Routes。

APi下的.htaccess包含以下代码:

<IfModule mod_rewrite.c>
 RewriteEngine On
 RewriteCond %{REQUEST_FILENAME} !-f
 RewriteCond %{REQUEST_FILENAME} !-d
 RewriteRule ^ index.php [QSA]
</IfModule>

v0.9目录下的index.php包含主页

同一目录下的.htaccess包含:

<IfModule mod_rewrite.c>
RewriteEngine on


RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^ index.php [QSA,L] 


RewriteRule ^(_APP/) - [F,L,NC]
</IfModule>

此.htaccess限制直接访问_APP文件夹,因为它包含敏感数据。 现在,人们会告诉我将其移至可公开访问的目录之外,但是对于像我这样的共享托管用户,托管公司限制将其移出公共根目录。 尽管使用此设置可保护应用程序安全,但您应始终尝试将此_APP目录移到公共目录之外。

并且主要的config.php包含:

<?php
// PROJECT SETTINGS
// Show Erros on Localhost and Local Ethernet only
$test_server = $_SERVER['SERVER_NAME'] == "127.0.0.1" || $_SERVER['SERVER_NAME'] == "localhost" || substr($_SERVER['SERVER_NAME'],0,3) == "192";
ini_set('display_errors',$test_server);
error_reporting(E_ALL|E_STRICT);

$_APP=array();

// META CONFIGURATIONS
$_APP= array_merge($_APP, array(
        'meta'=>array(
            'name'=>'expoWWW',
            'ver'=>'v 0.0.2',
            'url'=>'http://localhost/AppName/v0.9/',
            'root'=>$_SERVER['DOCUMENT_ROOT'].'/',
            'appUrl'=>'AppName/v0.9/',
            'author'=>'Abhishek Deb (iam@debabhishek.com)',
            'admin'=>''
            )
        ));


// DATABASE CONFIGURATION
$_APP= array_merge($_APP, array(
        'db'=>array(
            'h'=>'localhost',
            'u'=>'root',
            'p'=>'root',
            'd'=>'APpName'
            )
        ));





// FUNCTIONS




// HOUSE-KEEPING

?>

用法 :我只是在每个php文件中都包含此配置文件,然后可以使用$_APP['db']['h']

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM