1

私のアプリケーションでは、リンクを SEO フレンドリーにするために URL 書き換えを実装したいと考えています。

1.http://example.com/item.php?act=view&id=192
2.http://example.com/feedback.php?id=146

1.http://example.com/items/itemsname
2.http://www.example.com/username

質問

1)少し混乱していますが、コード内のすべてのリンクをhttp://example.com/items/itemsnameに変更し、書き換えを使用してhttp://example.com/item.php に変換する必要がありますか? act=view&id=192 ?

また

コードを http://example.com/item.php?act=view&id=192 のままにし、書き換えてhttp://example.com/items/itemsnameに変換することができます (オプション 2 はより現実的に見えます。そうしないと、.htaccess がないと何も機能しません)

2) Apache と Php でこれを行うにはどうすればよいですか?

4

3 に答える 3

1

これを達成するにはいくつかの方法があります。現在の PHP で最も簡単な方法は、リンクを次のように変更することです。

http://example.com/items/id-itemsname
http://example.com/id-username

したがって、実際の例は次のようになります。

http://example.com/items/192-Wash-Machine
http://example.com/feedback/146-Jon-Lin

そして、このルールを使用して簡単に変換できます。

Options +FollowSymLinks -MultiViews

RewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^items/([0-9]+)-.*$ /item.php?act=view&id=$1 [L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^feedback/([0-9]+)-.*$ /feedback.php?id=$1 [L]

このようにして、タイトルを完全に無視して ID だけを取得し、ユーザーにタイトルを表示しながら現在のスクリプトを使用できます。

別の方法は、あなたが言及したようなもので、次のようになります。

http://example.com/items/itemsname
http://example.com/feedback/username

次に、フィードバックと項目を名前で検索するように PHP を変更する必要があるため、次のようになります。

http://example.com/item.php?act=view&name=Wash Machine
http://example.com/feedback.php?username=Jon Lin

そして、ルールは次のようになります。

Options +FollowSymLinks -MultiViews

RewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^items/([^/]+)/?$ /item.php?act=view&name=$1 [L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^feedback/([^/]+)/?$ /feedback.php?username=$1 [L]
于 2013-08-28T21:12:21.120 に答える
1

コード内のすべてのリンクをhttp://example.com/items/itemsnameに変更し、書き換えを使用してhttp://example.com/item.php?act=に変換する必要がありますか?ビュー&id=192 ?

できればこれをやりたい。これは、クリックされるすべてのリンクに対して別の処理レイヤーがないことを意味します。

翻訳は少し曖昧です。例えば:

/username->/feedback.php?id=146

「ユーザー名」は「sam」のようなものだと思いますが、「id」は数字です。書き換えモジュールは、このマッピングについて何も認識していません。htaccess ファイル内の何も、ユーザー名が ID にどのようにマップされるか、または項目名が ID にどのようにマップされるかについて何も認識していません。できる唯一のことは、RewriteMapこのマッピングにアクセスする server/vhost 構成で定義されている を使用することです。

あなたがやったほうがいいのは、phpを使うことです。アイテムとユーザー名をitem.phpおよびfeedback.phpスクリプトにマップします。これらのスクリプトに、名前に基づいて ID を割り出させます。そして、これらのスクリプトにリクエスト URI をチェックさせて、リクエストが SEO に見える URL ではなく直接 php ファイルに対するものかどうかを確認し、必要に応じてリダイレクトさせます。

mod_rewrite に実行させたい唯一のことは、フォワード マッピングを実行することです。

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond ^item/(.*)$ /item.php?act=view&name=$1 [L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond ^(.*)$ /feedback.php?name=$1 [L]

ここで、" " パラメータを探し、nameそれらを必要な ID にマップしてから、通常どおり続行します。

于 2013-08-28T19:54:25.293 に答える