使用mod_rewrite时,如何在用户请求时从url中删除路径?
问题描述:
基本上我想要做的是改变浏览器地址栏中显示的网址。因此,如果用户输入example.com/lang/en我希望地址栏只显示example.com从显示内容中删除/lang/en部分。使用mod_rewrite时,如何在用户请求时从url中删除路径?
我已经尝试了一些的RewriteRules,但没有奏效。谁能帮我吗?谢谢。
答
编辑:我错过理解的你的要求。请试试这个。
<?php
$uri = explode('/',$_SERVER['REQUEST_URI']);
if ($lang_key = array_search('lang',$uri)) {
$lang = $uri[$lang_key+1];
unset($uri[$lang_key],$uri[$lang_key+1]);
$_SESSION['lang'] = $lang;
header('location: http://example.com/'.implode('/',$uri));
}
答
你不能mod_rewrite
节省variable
如果你改变example.com/lang/en
到example.com
你不能访问到lang/en
更多的和不断变化的语言
做到这一点的最好办法是使用$_SESSION
和header("location..")
为example.com/?lang=en
session_start()
if(isset($_GET['lang']))
{
$_SESSION['lang'] = $_GET['lang'];
header("location: example.com");
exit;
}
if(!isset($_SESSION['lang']))
$_SESSION['lang'] = "en" //default language
答
将浏览器重定向时的明确要求为/lang/en
制作:
RewriteEngine On
RewriteCond %{THE_REQUEST} ^(GET|HEAD)\ /en/lang
RewriteRule ^en/lang/(.*)$ /$1 [L,R=301]
内部成为/
请求改写回/land/en
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{DOCUMENT_ROOT}/en/lang%{REQUEST_URI} -f
RewriteRule ^(.*)$ /en/lang/$1 [L]
嗯ok了。有道理。那么我将使用mod_rewrite从显示中删除查询呢? – 2013-05-03 21:19:51
运行一个页面后,你不能使用mod_rewrite,你应该使用header(“location ..”)来改变你的位置 – Cooper 2013-05-04 10:14:07