【问题标题】:changing php function calling URL with mod_rewrite使用 mod_rewrite 更改 php 函数调用 URL
【发布时间】:2016-07-01 14:06:55
【问题描述】:

我已经在这里搜索了答案,但找不到确切的答案。

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

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

其中包含如下信息:

-<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 将 url 更改为:

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

我有这样的东西:

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

我真的不擅长 mod_rewrite,我得到的这段代码是基于旧版本的 .htaccess 文件。

有什么建议吗?谢谢!

【问题讨论】:

  • 是否要将当前 URL https://example.com/App/makeInfoBox/258/Applicationname 重定向到新 URL https://example.com/appInfoBox.xml?id=258&amp;short_name=Applicationname

标签: php apache .htaccess codeigniter mod-rewrite


【解决方案1】:

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

RewriteRule ^App/makeInfoBox/(.+?)/(.+)$ /appInfoBox.xml?id=$1&short_name=$2 [L]

【讨论】:

    【解决方案2】:

    在 .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 指令将使用QSA 标志将请求映射到example.com/appInfoBox.xml?id=(any-number)&amp;short_name=(any-number-of-characters)

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

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

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

    【讨论】:

    • 感谢您的回答。阅读我的问题,我注意到我编造了一些东西。我需要相反的东西,所以 URL https://example.com/appInfoBox.xml?id=258&amp;short_name=Applicationname 需要通过 mod_rewrite 重写为 https://example.com/App/makeInfoBox/258/Applicationname 以便服务器可以执行具有给定 ID 的 php 函数。对不起,我不清楚的问题!我试过类似的东西:RewriteCond %{REQUEST_URI} ^/appInfoBox.xml?id=([0-9]+)$ RewriteRule ^(.*)$ /App/makeInfoBox/%1 [QSA,R=302]
    猜你喜欢
    • 1970-01-01
    • 2012-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多