如何只重写特定的URL?

时间:2014-04-25 12:26:37

标签: regex mod-rewrite

我们有一个用PHP编写的CRM系统,可以通过专用网络获得。我们决定为我们的系统开发REST API,因此我们可以创建智能手机应用程序来增强软件。这就是简单的URL的外观:

servername.intra/index.php?module=Invoice&action=ListView

servername.intra/index.php?module=Store&action=SlipDetailViewIn&record=235894

我不想干涉这个丑陋但经过良好尝试的url结构,但我想为RESTful API使用格式良好的URI。所以我想要的是仅在域之后包含 / androidapi 字的URI上使用重写规则。

我想以这样的方式制作URI:

servername.intra/androidapi
servername.intra/androidapi/production
servername.intra/androidapi/production/abc_123_2014
(and any other that has androidapi after the servername.intra/)

重定向到这里:

servername.intra/androidapi/main.php?request=
servername.intra/androidapi/main.php?request=production
servername.intra/androidapi/main.php?request=production/abc_123_2014

我在.htaccess中试过这个,但没有成功:

<IfModule mod_rewrite.c>  
    RewriteEngine On
    RewriteBase /
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^/androidapi(.*)$ /androidapi/main.php?request=$1 [QSA,L]
</IfModule>

保持其他任何网址的完整性非常重要!只需用其中的 / androidapi 重写那些! 我从未成为 mod_rewrite 正则表达式魔术师,我该如何解决此重定向问题?

1 个答案:

答案 0 :(得分:0)

您不需要^。这意味着开始字符串。在您的情况下,androidapi可能不在字符串的开头。

执行此正则表达式:

/androidapi(/?)(.*)

完整代码:

<IfModule mod_rewrite.c>  
    RewriteEngine On
    RewriteBase /
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule /androidapi(/?)(.*) /androidapi/main.php?request=$2 [QSA,L]
</IfModule>