[英]how to Mod-rewrite php + Slim url to sub-directory
我正在使用Slim 2.4和php 5.3。 我在本地主机中的目录结构是这样的:
我想访问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次后 ,我决定更改目录结构,现在一切正常。 :)我正在发布此答案,以帮助其他人也遇到同样的问题。 这是我的目录结构。
现在,这些是我在主文件中使用的代码: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.