Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/232.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 重写.htaccess上的cond_Php_Apache_Api_Rest - Fatal编程技术网

Php 重写.htaccess上的cond

Php 重写.htaccess上的cond,php,apache,api,rest,Php,Apache,Api,Rest,我正在为我的web服务编写RESTful API。 我希望以下模式的所有调用都会触发位于/myserver/api/controller.php中的php文件 模式是: http://www.mydomain.com/api/user http://www.mydomain.com/api/resource 基本上,对*的所有调用都应该触发/api/controller.php 目前,my.htaccess位于/api中,如下所示: RewriteEngine On RewriteCond %{

我正在为我的web服务编写RESTful API。
我希望以下模式的所有调用都会触发位于/myserver/api/controller.php中的php文件 模式是:
http://www.mydomain.com/api/user
http://www.mydomain.com/api/resource

基本上,对*的所有调用都应该触发/api/controller.php

目前,my.htaccess位于/api中,如下所示:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . controller.php
更新1:
父目录中的.htaccess是:

RewriteEngine On
RewriteCond %{HTTP_HOST} !:9000$
RewriteCond %{SCRIPT_FILENAME} \.php$ [OR]
RewriteCond %{REQUEST_URI} ^$
RewriteRule ^(.*)$ http://%{HTTP_HOST}:9000/$1 [P,L]
RedirectMatch 301 /jobs$ http://someurl
RedirectMatch 301 /support/$ http://someurl
RedirectMatch 301 /jobs$ http://someurl
RedirectMatch 301 /someurlA http://someurlB
如何写入.htaccess文件

谢谢

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^.* controller.php [L]
更新:

RewriteEngine On
RewriteBase /api
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^.* controller.php [L]
这个怎么样:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ controller.php?q=$1 [L,QSA]

这会将类似于
/api/user/5
的请求重定向到
/api/controller.php?q=user/5
。“QSA”还将保留已经存在的任何查询字符串变量。

不清楚Apache是否正在读取您的.htaccess文件。尝试将
Wooga
非指令放在那里,看看是否出现500错误

另外,除非您别无选择,否则不要将.htaccess文件用于mod_重写(或任何其他内容)

更新1

好的,您的.htaccess文件正在被读取。下一步是尝试一个更简单的规则。比如:

RewriteEngine On
RewriteRule ^ http://httpd.apache.org/
如果这样做有效,那么您就知道mod_rewrite正在运行,问题在于规则中的匹配

更新2

所以mod_rewrite正在工作,这意味着您的规则不匹配。尝试删除条件,但保持规则不变

RewriteEngine On
RewriteRule . controller.php
如果这导致循环,请将其更改为:

RewriteEngine On
RewriteRule !controller.php controller.php


他只要求URL以api/*开头。“你拥有了所有这些。@akond,他说他的.htaccess文件已经在api目录中,所以它只对该目录(以及任何子目录)有效,这解决不了任何问题。他已经可以通过
$\u服务器['REQUEST\u URI']
访问请求的路径。你应该避开反向引用。当然,OP没有说明问题的实质。@Artefactor,你是对的,我误读了原始的.htaccess-它应该可以像写的那样工作。但是,我的方法至少将controller.php与其所在的目录解耦。而且我不确定您对转义反向引用是什么意思-$1是在重写规则中编写反向引用的正确方法。@Brian请参见下面的,flag
B
。它不起作用。。。例如,它显示了www.mydomain.com/api/user/123的404。也许您在httpd.conf中没有允许覆盖?用RewriteLog和RewriteLogLevel打开日志记录,看看发生了什么。是的,很可能是这样。不,我查过了。它读取.htaccess文件。@Sharon,您的档案显示,到目前为止,您已经收到了7个问题的12个答案,但尚未接受其中任何一个。你应该对此采取一些措施,否则你可能会发现自己被忽视。我尝试了这个方法,但它仍然显示404而不是controller.php。你有另一个想法吗?你确定。htaccess是活动的吗?你说的“活动”是什么意思?如何检查它是否处于活动状态,如果不处于活动状态,如何更改它?好的,只需添加另一行仅包含“1”,保存它并点击刷新。如果没有错误,它将处于非活动状态。如果您尝试我的示例,则会出现错误。我将不需要的api放在子目录中。请尝试固定版本。另外,如果您告诉我们您试图访问的URL,也会有所帮助。@noodl,我把它放在定向我中的.htaccess中。我想规则是错误的。你知道吗?你又回到起点了。我怀疑重写正在工作,但controller.php不是您的规则所指示的位置。或者,在规则运行后,父目录中有一个.htaccess文件正在更改最终目标。请检查我的更新。我将.htaccess放在父目录中。您能看到任何冲突吗?当您直接请求/api/controller.php时会发生什么?不,我看不到任何冲突,尽管您的[P]代理指令有点可疑。。