使用apache mod_rewrite重定向到php文件

时间:2017-11-15 06:48:03

标签: php apache .htaccess url mod-rewrite

我想重定向以下网址:

http://www.example.com/food/?p=11&q=22&r=33

http://www.example.com/food/api.php/DBNAME/?p=11&q=22&r=33

您可能已经注意到,DBNAME是数据库的名称。 使用我正在使用的API,有必要将其包含在URL中。

这是我的程序的简短文件夹结构:

food/
   ->include/
   ->models/
   ->.htaccess
   ->api.php
   ->config.php
   ->test.php

我尝试在.htaccess文件上编写规则,但收到Internal server错误。

我的.htaccess文件如下所示:

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteRule ^(.*)$ api.php/DBNAME/$1 [L]
</IfModule>

我可以开始实现重定向。 我也试过

RewriteRule ^food/(.*)$ api.php/DBNAME/$1 [L]

但是这条规则只列出了食物目录中的文件。

有什么想法吗? 谢谢!

PS:查询字符串不只是p=11&q=22&r=33,它可以使用任何字母或单词,如类型,数量等。 p=11&q=22&r=33只是一个例子。

修改 从@sanj提供的链接我将.htaccess ffile更改为此

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_URI} ^/food/?$
RewriteRule ^(.*)$ api.php/DBNAME/$1
</IfModule>

部分工作。为何部分?

我有两台服务器,一台用于测试,一台用于生产。它在测试服务器上运行良好,但在生产服务器上运行良好。我收到Authorization Required错误。我相信这是由于我的.htaccess中的配置,因为如果我删除mod_rewrite模块并直接访问url就可以了。有什么想法吗?

发现我的错误。该文件夹受基本身份验证保护。我需要在我的代码中包含登录参数。我无法相信我忽视了这一点。

1 个答案:

答案 0 :(得分:1)

我认为这会奏效:

import environ
environ.Path() - 1 + 'foo.txt'
相关问题