我们有一个用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 或正则表达式魔术师,我该如何解决此重定向问题?
答案 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>