2016-08-31 4 views
0

タイトルには次のように書かれています。私は単一のパラメータを受け入れるPHPスクリプトを持っています。このような:Nginx rewriteurl from site.com/script.php?param=value to site.com/value

私のプロジェクトの構造は、次のようなものです:

site.com/id 

site.com/i.php?icon=id 

から

index.php 
i.php 
terms.php 
functions 
includes 
icons 
resources 

私はそのURLを書き換えするスクリプトをされi.php

他のすべてが通常アクセス可能であることを確認しながら(例えば、site.com/terms.php)。 どうすればいいですか?

編集 これは参考になるかもしれません。ここで私は私のApacheサーバ上で使用するために使用私の以前の.htaccessです:あなたが何かを探している

Options +FollowSymLinks 
RewriteEngine On 

RewriteCond %{SCRIPT_FILENAME} !-d 
RewriteCond %{SCRIPT_FILENAME} !-f 
RewriteRule ^(\w+)$ ./i.php?icon=$1 
+0

、^/i.phpアイコン=/IDブレークを書き換えます。 – Satys

+0

これはきちんとしていますが、一般的なものではありません。例えば、ユーザーが同様のことをした 'f.php'という名前の新しいスクリプトを書くとどうなりますか?また、クエリ文字列に 'icon'がない場合はどうなりますか?また、あなたの提案では、バックリファレンス 'rewrite ^/i.php?icon =(。*)/ $ 1'を使用するのを忘れました。 –

答えて

0

私はそれがこれを使って作業持っている:?(。*)に問題が何であるかを

location/{ 
    try_files $uri $uri/ /i.php?icon=$uri; 
} 
0

if ($query_string ~ .*=(.*)){ 
    return 301 $scheme://site.com/$1; 
} 

は、それはそれほど単純ではありません。これにより、のURLとクエリ文字列と等号(i.php以外)がsite.com/everything_after_the_equal_signにリダイレクトされます。これをi.phpにのみ適用する場合は、そのためのロケーションブロックを作成する必要があります。

location /i.php/ { 
    if ($query_string ~ .*=(.*)){ 
    return 301 $scheme://site.com/$1; 
} 

このような既存の場所ブロックがある場合は、このif文を追加する必要があります。あなたは、このような

location ~ \.php$ { 
    #your config here 
} 

として一般的な場所のブロックからすべてのPHPのコンテンツを提供しているなら、あなたは、具体的​​上記の一般的なブロックを追加する必要があります。最も重要なこと

が悪である場合(hereを参照してください)。ロケーションブロックにifステートメントがある場合は、これが適用されます。可能であれば、これらのリダイレクトを内部的に行うコードを書き直してみてください。それ以外の場合は、ドキュメントに記載されているように、ifは避けられないことがあります。

こちらがお役に立てば幸いです。

+0

301リダイレクトはここの解決策ではないと思います。私は読めるようにURLを書き換えようとしています。 –

+0

ここに私のウェブサイトがあります:http://testmyicon.com/ 私はこのURLが欲しいです:http://testmyicon.com/i.php?icon=hb798 http:// testmyiconになります。com/hb798 これは私の目標です –

関連する問題