我希望能够从以下位置重写网址:
// 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
但是,当您使用“漂亮网址”(例如http://example.com/location/90210)时,它没有将GET位置变量传递到/location/index.html页面。
我知道这个b / c当我在使用长网址时回显到屏幕(使用javascript )位置GET变量时,它已设置但是当使用漂亮(短)网址时,位置GET变量未定义。
答案 0 :(得分: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来回显出打印”位置“变量的警报。”
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'] . '.';
?>
与重写相结合时,对于网址http://www.example.com/location/Houston,TX
,它会打印出来:
The location you entered is Austin,TX.
(当然,有很多服务器端语言,我使用PHP作为我最熟悉的例子)
答案 1 :(得分:0)
重申一下,Piskvor发布的解决方案确实按预期工作。根据对此的评论,您使用javascript来获取查询字符串,这就是问题所在。就javascript而言,原始URL是它看到的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