使用mod_rewrite

时间:2016-07-01 14:06:56

标签: php apache .htaccess codeigniter mod-rewrite

我已在这里搜索答案,但无法找到确切的答案。

我有一个php应用程序(它使用CodeIgniter),它连接到我们公司的管理数据库。应用程序以xml格式从数据库中提供信息,以便我们的内部mediawiki可以接收这些信息并构建信息框(例如)。

我有以下xml格式的数据链接:     https://example.com/controller/function/databaseID/short_name或     https://example.com/App/makeInfoBox/258/Applicationname

其中包含Infromation如下:

-<infobox>
<id>258</id>
<short_name>Applicationname</short_name>
<long_name>Long Applicationname</long_name>
<app_number>334</app_number>
<status>End of life</status>
...
</infobox>`

我现在想让mod_rewrite将网址更改为:

https://example.com/appInfoBox.xml?id=258&short_name=Applicationname

我有这样的事情:

RewriteCond %{QUERY_STRING} ^id=([0-9]+)\&short_name=(.*)$
RewriteRule ^appInfoBox\.xml$ App/makeInfoBox/%1/%2

我在mod_rewrite中真的不太好,我得到的这段代码是基于旧版本的.htaccess文件。

有什么建议吗?谢谢!

2 个答案:

答案 0 :(得分:0)

您必须捕获请求(...)的相关部分,并在替换$...

中使用此部分
RewriteRule ^App/makeInfoBox/(.+?)/(.+)$ /appInfoBox.xml?id=$1&short_name=$2 [L]

答案 1 :(得分:0)

在.htaccess文件中使用以下指令:

RewriteEngine On
RewriteCond %{REQUEST_URI} ^/App/makeInfoBox/([0-9]+)/(.*)$
RewriteRule ^(.*)$ /appInfoBox.xml?id=%1&short_name=%2 [QSA,R=302]

.htaccess文件应该出现在example.com的根文件夹中。

RewriteCond指令将检查请求是否与模式/App/makeInfoBox/(any-number)/(any-number-of-characters)匹配。

如果这是真的,RewriteRule指令将使用example.com/appInfoBox.xml?id=(any-number)&short_name=(any-number-of-characters)标志将请求映射到QSA

R=302标志将导致外部重定向,最终用户将能够在浏览器上看到带有查询字符串的新URL。

如果您不想向最终用户显示带有查询字符串的URL,只需删除R=302标记。

使用您的示例,现在,如果您将访问https://example.com/App/makeInfoBox/258/Applicationname,它将重定向到https://example.com/appInfoBox.xml?id=258&short_name=Applicationname