0

PHPでのURLの書き換えについて質問があります。

1- www.test.com/index.php?name=123 to www.test.com/123

2- www.test.com/folder1/index.php?name=123 to www.test.com/folder1/123/index.php

これが1番のコーディングですが、2番の組み合わせを1番に書き換える方法がわかりません。

RewriteEngine on
RewriteCond  %{REQUEST_FILENAME} !-f
RewriteCond  %{REQUEST_FILENAME} !-d
RewriteRule  ^(.*)$ index.php?usname=$1 [QSA,L]
4

2 に答える 2

1

「phpでURLを書き換える」と言うとき、「phpで」は、rewrite / redirectメソッドではなく、アプリケーションの言語を指していると思います。サンプルコードはApacheディレクティブで構成されているためです。

以下のルールは、test.com / folder1 / index.php?name = 123の形式のURLをtest.com/folder1/123の形式の「きれいな」URLに変更します(「index.php」を削除して均等にしましたよりユーザーフレンドリー)。

  1. 醜いクエリURLをリダイレクトして、ユーザーが常に「きれいな」URLを表示できるようにします

    RewriteCond  %{QUERY_STRING} \bname=([^&]+)
    RewriteRule  ^/?folder1/index\.php$ /folder1/%1 [R=302]
    
  2. クリーンURLの解釈方法をサーバーに指示する

    RewriteRule  ^/?folder1/([^\/]+)(/index\.php)?$ /folder1/index.php?name=$1 [L]
    

注: 上記の最初のルールは302(一時的な)リダイレクトを使用するため、テストおよび調整中にブラウザがリダイレクトルールを「記憶」することはありません。SEOに関心がある場合は、に変更し[R=302]てください[R=301]。これは永続的なリダイレクトです。

于 2012-10-19T13:50:47.857 に答える
0

これを試してください:

RewriteEngine on
RewriteCond  %{REQUEST_FILENAME} !-f
RewriteCond  %{REQUEST_FILENAME} !-d
RewriteRule  ^(.*)/([0-9]+)/index.php $1/index.php?name=$2 [QSA,L]
RewriteRule  ^(.*)$ index.php?usname=$1 [QSA,L]

書き換えルールの最後にある[L]命令は、ルールが一致した場合、.htaccessの解析を終了することを意味します。

したがって、すべてのケースを処理するルール^(。*)$の前にルールを配置する必要があります

于 2012-10-19T13:19:53.520 に答える