1

私は現在、自分のプロジェクトの 1 つに URL 短縮機能を作ろうとしています。ユーザーがスラッシュ (ディレクトリ用) やファイル拡張子を含まない URL でサイトにアクセスした場合、正しいファイルを提供する PHP スクリプトにリダイレクトする必要があります。例えば:

http://example.com/A123はhttp://example.com/view.php?id=A123に書き換えられます

しかし、 http://example.com/A123/は書き換えられず、 http://example.com/A123.pngも書き換えられません。私は数時間 mod_rewrite をいじっていますが、私の人生ではこれを機能させることができません...

4

2 に答える 2

2

短縮する必要がある URI を特定する方法がないため、他のすべての可能性を除外する必要があります。これには、長い除外リストの作成が必要になる可能性があります。以下は出発点です。これらの各条件は、要求元の URI が一致しないことを検証します (! で示されます)。すべての条件に一致しない場合、ルールが実行されます。

RewriteCond %{REQUEST_URI} !^/view.php
RewriteCond %{REQUEST_URI} !.html$
RewriteCond %{REQUEST_URI} !/$
RewriteRule ^/(.*)$ http://example.com/view.php?id=$1 [QSA]

上記では、(ご要望に応じて) 標準的な慣行規則を破る必要もあります。これは、末尾のスラッシュなしでディレクトリ要求を処理するというものです。上記のルールは Apache サーバー側のディレクトリ ルールに違反するため、他の問題に遭遇する可能性があります。

ロジックを再考します。短縮する URL を特定する方法があれば、はるかに簡単になります。たとえば、「s」、http://example.com/s/A123

RewriteCond %{REQUEST_URI} ^/s/
RewriteRule ^/s/(.*)$ http://example.com/view.php?id=$1 [QSA]
于 2012-12-17T00:12:21.800 に答える
0

私は間違いなくこれについての第一人者ではありませんが、それは私が達成しようとしていることと似ています(まだ答えられていない質問を参照してください)

ただし、正しく理解していれば、これ (未テスト)RewriteRuleが機能する可能性があります。

RewriteRule ^([^\.\/]*)$ view.php?id=$1 [L]

魔法の部分は、ピリオドまたはスラッシュではない ( ) 文字 ( ) の[^\.\/]*1 つ以上 ( *) インスタンス(これらの文字をエスケープする) です。[][^ ]\

私が言ったように、私はこれをテストしておらず、専門家でもありませんが、おそらくこれが役立つでしょう.

于 2012-12-16T02:59:40.490 に答える