0

次の URL を書き換えられるようにしたい:

// examples

http://example.com/location/New York, NY  -->
http://example.com/location/index.html?location=New York, NY

http://example.com/location/90210  -->
http://example.com/location/index.html?location=90210

http://example.com/location/Texas -->
http://example.com/location/index.html?location=Texas

http://example.com/location/ANYTHING....  -->  
http://example.com/location/index.html?location=ANYTHING...

.htaccessmod_rewriteを使用します。

誰でもこれを行う方法を知っていますか?

私が試してみました:

RewriteEngine on
RewriteCond %{REQUEST_URI} !location/index.html
RewriteRule ^location/(.*)$ /location/index.html?location=$1

ただし、「pretty url」 (例: http://example.com/location/90210 )を使用すると、GET ロケーション変数が /location/index.html ページに渡されません。

長いURLが使用されている場合は( javascriptを使用して)場所のGET変数を画面にエコーアウトすると、このb/cが設定されますが、きれいな(短い)URLが使用される場合、場所のGET変数は未定義です。

4

2 に答える 2

3

最後の例は機能するはずです。また、条件が大文字と小文字を区別しないようにチェックし (/LoCation/indeX.htmL が解析されないようにするため)、[L] で書き換えを終了し (無限ループを防ぐため)、QSA を追加します (クエリを追加するため):

RewriteEngine on
RewriteCond %{REQUEST_URI} !location/index.html [NC]
RewriteRule ^location/(.*)$ /location/index.html?location=$1 [L,QSA]

location GET 変数をどのように読み取る (そしてエコーする) のですか? 「JavaScript を使用して、"location" 変数を出力するアラートをエコーアウトしています。」

JavaScript はブラウザ内 (「クライアント側」) で実行されるため、ブラウザが見るのと同じデータで動作します。つまり、ブラウザをhttp://www.example.com/foo/bar/に向けると、サーバーでどのような書き換えを行っても、Javascript はhttp://www.example.com/foo/bar/場所として " " を認識します。

GET 変数にアクセスするには、ページが生成されたとき (「サーバー側」)、ブラウザーに送信される前にアクセスするためのコードが必要です。たとえば、PHP 対応のサーバーがあり、http://www.example.com/location/index.phpに次のスクリプトがあり、上記のコードのような方法でリダイレクトすると、アクセスしてアクセスできるようになります。 GET 変数を操作します。

<?php
echo 'The location you entered is ' . $_GET['location'] . '.';
?>

書き換えと組み合わせると、URL に対して次のように表示されますhttp://www.example.com/location/Houston,TX

The location you entered is Austin,TX.

(もちろん、多くのサーバー側言語があります。私が最もよく知っている例として PHP を使用しています)

于 2008-11-03T17:47:49.257 に答える
0

繰り返しになりますが、Piskvorによって投稿されたソリューションは期待どおりに機能します。そのコメントによると、JavaScriptを使用してクエリ文字列を取得していますが、これが問題です。javascriptに関する限り、元のURLが表示されます。これは自分ですばやく確認できます。

alert(document.location.href);

javascriptで値を取得する必要がある場合は、次のようなものを使用することをお勧めします。

var regex = /location\/(.*)$/;
var query = document.location.href.match(regex);
alert(query[1]);

// query[1] will contain "90210" in your example
// http://example.com/location/90210
于 2008-11-03T19:07:38.380 に答える