5

私はこの最終的なURLを取得したいと思います:

「理想のURL」

domain/services/city/name/

この URL から:

「実際の URL」

domain/page.php?s=services&c=city&a=name

これは、ユーザーが「理想的な」URL を入力したときと、「実際の」URL がボタンからクリックされたときの両方で機能するはずです。

domain/services/これがasdomain/page.php?s=servicesまたはdomain/services/city/asでも機能することを望みdomain/page.php?s=services&c=cityます。

私はコードを尋ねているわけではありませんが、この結果を達成するためのベストプラクティスは何ですか.

すべてのケースで htaccess および write コマンドのみを使用する必要がありますか、それとも何か他のことをする必要がありますか?

4

5 に答える 5

1

mod_rewrite と .htaccess を有効にしてからhttpd.conf、このコードをディレクトリの.htaccess下に配置します。DOCUMENT_ROOT

Options +FollowSymLinks -MultiViews
# Turn mod_rewrite on
RewriteEngine On
RewriteBase /

# redirects /page.php?s=services&c=city&a=name to /services/city/name/
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/+page\.php\?s=([^&]+)&c=([^&]+)&a=([^&]+) [NC]
RewriteRule ^ /%1/%2/%3? [R=301,L]

# forwards /services/city/name/to /page.php?s=services&c=city&a=name
RewriteRule ^([^/]+)/([^/]+)/([^/]+)/?$ /page.php?s=$1&c=$2&a=$3 [L,QSA]

PS:上記のルールは/services/city/name/URI のみを処理することに注意してください。処理するには、同様の一連のルールを追加する必要が/services/city/あり/services/ます (URI ごとに 1 つのリダイレクトと 1 つの転送。最も具体的なものから最も一般的なものへと進みます)

于 2013-03-28T14:16:57.007 に答える
1

ベスト プラクティスは、クエリ パーサーを作成することです。たとえば、TinyMVC フレームワークの例を参照するか、ルーター、フロント コントローラー、ディスパッチャーなどについて google を検索してください。

「c」や「a」などのカスタム パラメータ名があるため、実現が難しい場合があります。したがって、人間が読めるパラメーター名を次のような変数名に割り当てるマップを作成する必要があります。

'city' => 'c'
'name' => 'a'

クエリ パーサーは、次のような方法で変数を自動割り当てすることもできます。

/domain/services/c=london/n=peter/

この種のディスパッチャーは、画像、swf、css、js などを除いて、すべてのリクエストを .htaccess 内の 1 つの php ファイル (通常は index.php) に再マップすると、すべてのリンクで実行できます。

URL ルーティング ロジックをどのように計画するかは、ユーザーが決定します。特殊文字と URL エンコーディングについて覚えておいてください。

/module/action/param1/param2/ などのユニバーサル URL パターンを作成するには、「最初のパラメーター」、「2 番目のパラメーター」のように数値順にパラメーター値を取得することを検討してください。そのため、名前とは関係なく、常に番号でパラメーターを取得できます。

htaccess にコマンドを書くことはもちろんできますが、新しいアクションを追加するときに問題が発生します。

ユーザーがリンクをクリックしたり、フォームを送信したりしても、これらの「理想的な」URL を表示したい場合は、.htaccess を変更したり、ルーターを記述したりすることしかできません。また、コード内のリンク/アクションを変更するか、次のような URL ビルダーを作成する必要があります

<a href="<?php buildUrl( 'modulke' , 'action' , 'param1' , 'param2' ); ?>">aaaa</a>

于 2013-03-28T14:13:21.677 に答える
1

あなたは.htaccessもちろんオフに使用する必要があります, 行く方法です.

そのためのルールは次のようになります。

 RewriteEngine On

 <IfModule mod_rewrite.c>
      RewriteEngine On 
      RewriteRule ^([^/.]+)/([^/.]+)/([^/.]*)?$ page.php?s=$1&c=$2&a=$3&%{QUERY_STRING}
  </IfModule>
于 2013-03-28T14:13:38.483 に答える
1

http://www.addedbytes.com/articles/for-beginners/url-rewriting-for-beginners/には、開始するために探しているすべての答えがあります。

@Uberfuzzy が述べたように、ベスト プラクティスは、最も具体的なものを最初に定義することです。

RewriteRule    ^domain/services/city    domain/page.php?s=services&c=city    [NC,L]
RewriteRule    ^domain/services/        domain/page.php?s=services           [NC,L]

通常、htaccess を使用して、あらゆる場合にコマンドを記述する必要があります。例外は、フレームワーク (Zend Framewor) または URL の書き換えを処理するその他のツールを使用する場合です。

于 2013-03-28T14:21:33.847 に答える
0

PHP側のディスパッチャーで、何らかの決定ロジックを移動できます。htacess で、存在しない URL を何らかのパターンで /index.php?url=$bla または /rewrite.php?url=$bla にリダイレクトします。

次に、そこからコードを含めます。このようにして、ほとんどのフレームワークが機能します。

ここでの主な問題は、存在しない画像、CSS、JavaScript など、php 以外のコードを 100% 無視することです。

于 2013-03-28T14:12:54.830 に答える