2016-07-01 7 views
0

私はすでにここで答えを探していますが、正確な答えは見つかりませんでした。mod_rewriteでURLを呼び出すphp関数を変更する

私はcompanys Management Databaseに接続しているPHPアプリケーション(CodeIgniterを使用しています)を持っています。アプリケーションはデータベースからxml形式で情報を提供し、内部のメディアウィキがそれらを受け取り、インフォボックスを作成することができます(例として)。

私は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>` 

は、URLを変更する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ファイルの古いバージョンに基づいています。

何か提案がありますか?ありがとう!

+0

にリダイレクトされます、あなたは、現在のURL 'httpsをリダイレクトしますか:新しいに// example.com /アプリケーション/ makeInfoBox/258/Applicationname'をURL 'https://example.com/appInfoBox.xml?id = 258&short_name = Applicationname'? – nidhi

答えて

0

あなたが要求(...)の関連部分をキャプチャし、置換$...

RewriteRule ^App/makeInfoBox/(.+?)/(.+)$ /appInfoBox.xml?id=$1&short_name=$2 [L] 
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ディレクティブは、QSAフラグを使用して、要求をexample.com/appInfoBox.xml?id=(any-number)&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

+0

あなたの答えをありがとう。私の質問を読んで、私は何かを作ったことに気づいた。私は反対のことが必要なので、 'https://example.com/appInfoBox.xml?id = 258&short_name = Applicationname'というURLをmod_rewriteで' https://example.com/App/makeInfoBox/258/ 'に書き換える必要があります指定されたIDでPHP関数を実行できるようにします。私の不明な質問に申し訳ありません!私は次のようなものを試しました: 'RewriteCond%{REQUEST_URI} ^/appInfoBox.xml?[QSA、R = 302] 'QSA、R = 302] $/App/makeInfoBox /%1 [QSA、R = 302] – Fuerro

関連する問題