2014-09-23 91 views
0

我试图找出如何修改.htaccess文件,所以我可以做两件事情:的Apache + PHP没有“.PHP”文件扩展名,但包括路径信息

  1. 是不是一定要包括。我的PHP文件的PHP扩展(例如,请求my.domain.com/page映射到my.domain.com/page.php)。
  2. 做了#1,同时还包括附加路径信息(例如,对my.domain.com/page/path/stuff/here的请求映射到my.domain.com/page.php/path/stuff/here)。

我已经找到了如何通过添加以下到.htaccess文件做#1:

# Allow PHP files without ".php" extension. 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^([^/.]+)/?$ /$1.php [L,QSA] 

不过,现在我想修改重写规则,因此适用于#2 。

回答

0

你可以只尝试使用Multiviews,它是由以做到这一点:

Options +Multiviews 
0
RewriteEngine On # Turn on the rewriting engine 
RewriteRule ^([^\.]+)$ $1.php [NC,L] #Remove the .php 

不知道你想和寻路的东西,虽然什么。

编辑基于您的评论,我用php/angular这样的东西。这可能不是“正确的”或最好的办法,但它对我有用。

的.htaccess

RewriteEngine  on 
# Allow the API to function as a Front Controller 
RewriteRule   ^api/(.*)$ api/index.php?rt=$1 [L,QSA,NC] 
# Allow Angular to have Pretty URL's 
RewriteCond   %{REQUEST_FILENAME} !-f 
RewriteCond   %{REQUEST_FILENAME} !-d 

API/index.php文件

// Pull the routing path 
$router = explode('/', $_GET['rt']); 

$version = $router[0]; 
$controller = $router[1]; 
$action = $router[2]; 

// Check for the file 
if(file_exists($version . '/controllers/' . $controller .'.class.php')) { 
    include $version . '/controllers/' . $controller .'.class.php'; 
} else { 
    return false; 
} 

// Initialize and execute 
$method = new $controller($action); 
print $method->$action(); 

这让我做这样的事情:API/V1 /用户/ url中的登录,然后会发现在V1文件夹中的users.class.php文件,并运行函数登录。

+0

除了'NC,L'之外,它和OP一样。请始终将解释添加到您的答案(“NC,L”是什么意思?)。 – DanFromGermany 2014-09-23 17:04:08

+0

有点,但不是真的。正则表达式是不同的。另外:[L = Last](http://httpd.apache.org/docs/2.2/rewrite/flags.html#flag_l)[NC = nocase](http://httpd.apache.org/docs/2.2/重写/ flags.html#flag_nc)。 – jassok 2014-09-23 17:07:10

+1

不幸的是,不这样做。但要回答jassok的问题,这是一种使HTTP请求更具体的方法。您可以从pathinfo中获取数据,以确定要执行哪个函数,以及您在查询字符串或表单数据中所期望的数据以及要返回的内容。这样,您可以为多个相关请求编写单个控制器。 – 2014-09-23 21:42:38

0

OK,寻找多视图后,我发现了几个文章警告对他们(嗯,每一个他自己),但也促使我使用2分的规则,而不是仅仅1回答:

RewriteRule ^([^\.]+)$ /$1.php [L] 
RewriteRule ^([^\./]+)/(.*) /$1.php/$2 [L] 

第一条规则捕获上面的案例#1,第二条规则捕获上面的案例#2。瞧!