0

私の以前の質問はすでにあなたに示しているかもしれないので、私はmodrewriteが得意ではありません。私はこの特定の問題を検索して空にしようとしました。誰かがこれを修正するのを手伝ってくれることを願っています。

短縮URLジェネレーターの一部としてmodrewriteを使用していますが、一意のIDに直接アクセスすると、宛先に転送されます。最後に/vを追加すると、転送先のURLを表示するポータルページが可能になります(プレビューページのように)

/ vはIDの後にあるため、問題なく機能しますが、 $_GETを介して新しいページを追加できるようにします。

これは、ユーザーに提供されるショートカットリンクです。

javascript:void(location.href='http://www.website.com/n/?url='+location.href)

これは.htaccessの内容です

RewriteEngine On

RewriteRule ^n actions.php?do=new [NS,L,NC]
RewriteRule ^([a-zA-Z0-9]+)$ actions.php?id=$1 [NC]
RewriteRule ^([a-zA-Z0-9]+)/([a-zA-Z0-9]+)$  actions.php?id=$1&do=$2 [NC]

問題: IDの代わりに/ nがある ため、明らかに競合します。NSとLは、ルールが一致した後に実行を停止できるため、試してみました。さらに詳しく調べてみると、もちろん、私が望むようには機能しません。

最後に、最終製品でURLがどのように表示されるかを示す例をいくつか示します。

   New Submission:
http://www.web.com/n/?url=http://www.google.com      [Outputs new URL as 12345]
   Visit the ID directly:
http://www.web.com/1A2b34D5                       [Forwards to URL Destination]
   Visit the ID Preview Link:
http://www.web.com/1A2b34D5/v             [Displays preview, Delayed Forwarder]
4

1 に答える 1

1

urlクエリ文字列から変数を取得する場合はQSA、オプションに追加するだけで、URLが保存されます。$_GET['url']

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f   # if the url file does not exist
RewriteRule ^n/?$ actions.php?do=new [NS,L,NC,QSA]
RewriteRule ^([a-zA-Z0-9]+)$ actions.php?id=$1 [NC,L]
RewriteRule ^([a-zA-Z0-9]+)/([a-zA-Z0-9]+)$  actions.php?id=$1&do=$2 [NC,L]

また、actions.phpには、条件を設定する必要があります。

if (isset($_GET['do']))
{
    if ($_GET['do'] == 'new') // http://www.web.com/n/?url=http://www.google.com
    {
        if (!isset($_GET['url'])) die('No url');

        // save the url
        // and outputs new URL
    }
    else if ($_GET['do'] == 'v') // http://www.web.com/1A2b34D5/v
    {
        // Visit the ID Preview Link
    }
}
else // http://www.web.com/1A2b34D5
{
    // Visit the ID directly
}

編集:

何が起こっているのかわかりませんが、コメントで言ったように、ローカルホストでテストしましたが、期待どおりに機能します。テストでは、同じコンテンツのファイルを作成した場合でもtest.php、このコンテンツを使用しています。これが私がテストしたいくつかのURLの例です:var_dump($_GET);actions.php

例1:

http://localhost/n?url=google.comまた http://localhost/n/?url=google.com

このルールが実行されました:

RewriteRule ^n/?$ actions.php?do=new [NS,L,NC,QSA]

出力:

array(2) { ["do"]=> string(3) "new" ["url"]=> string(10) "google.com" }

例2:

http://localhost/n12345出力:array(1) { ["id"]=> string(6) "n12345" } http://localhost/nnnn456出力:array(1) { ["id"]=> string(6) "nnnn456" }

このルールが実行されました:

RewriteRule ^([a-zA-Z0-9]+)$ actions.php?id=$1 [NC,L]

例3:

http://localhost/n12345/v出力:array(2) { ["id"]=> string(6) "n12345" ["do"]=> string(1) "v" }

このルールが実行されました:

RewriteRule ^([a-zA-Z0-9]+)/([a-zA-Z0-9]+)$ actions.php?id=$1&do=$2 [NC,L]

于 2013-03-25T01:55:20.953 に答える