2008-11-03 4 views
0

Я хочу, чтобы иметь возможность переписать URL из:Apache modrewrite .htaccess

// 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... 

использованием .htaccess и mod_rewrite.

Кто-нибудь знает, как это сделать?

Я попытался:

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

Однако, не передавая переменную местоположения GET на страницу /location/index.html, когда вы используете «довольно URL» (например http://example.com/location/90210).

Я знаю, что это б/с, когда я эхо к экрану (с помощью JavaScript) местоположение GET переменную, когда длинный URL используется, он установлен, но при использовании довольно (короткий) URL, расположение GET переменная не определена.

+0

почему дубликат? – Liam 2008-11-03 17:36:12

+0

, пожалуйста, прекратите публикацию дубликатов, опубликуйте любые последующие действия в своих предыдущих вопросах. – Owen 2008-11-03 17:37:07

ответ

3

Ваш последний пример должен работать; Я также проверил бы условие на отсутствие регистра (чтобы избежать анализа /LoCation/indeX.htmL из анализа), завершите переписывание с помощью [L] (для предотвращения бесконечных циклов) и добавьте QSA (для добавления запросов):

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

Как вы читаете (и эхо) переменную 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 в качестве примера я знаком с)

0

Чтобы повторить, решение p osted by 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