使用mod_rewrite,如何在用户请求时从URL中删除路径?

时间:2013-05-03 20:56:34

标签: php .htaccess mod-rewrite

基本上我要做的就是更改网址在浏览器地址栏中显示的内容。因此,如果用户输入 example.com/lang/en ,我希望地址栏只显示 example.com ,删除 / lang / en 部分来自显示的内容。

我尝试了一些rewriteRules,但它没有用。谁能帮我吗?谢谢。

3 个答案:

答案 0 :(得分:2)

您无法按variable

保存mod_rewrite

如果您将example.com/lang/en更改为example.com,则无法再访问lang/en并更改语言

执行此操作的最佳方法是使用$_SESSIONheader("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

答案 1 :(得分:0)

编辑:我想念你的要求。请试试这个。

<?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));
  }

答案 2 :(得分:0)

在针对/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]