如何重写.htaccess链接



我的功能像这样

function get_lang($url){
    $lang = explode("/", $url);
    $bahasa = array();
    $bahasa['url_id'] = '';
    $bahasa['url_en'] = '';
    if(in_array('id', $lang)){
      $bahasa['lang'] = "id";
      $bahasa['url_id'] = $url;
      $key = array_search('id', $lang);
      $lang[$key] = "en";
      $i=0;
      foreach($lang as $link){
        if($i==0){
          $bahasa['url_en'] .= $link;
        }else{
          $bahasa['url_en'] .= '/'.$link;
        }
        $i++;
      }
      return $bahasa;
    }
    if(in_array('en', $lang)){
      $bahasa['lang'] = "en";
      $bahasa['url_en'] = $url;
      $key = array_search('en', $lang);
      $lang[$key] = "id";
      $i=0;
      foreach($lang as $link){
        if($i==0){
          $bahasa['url_id'] .= $link;
        }else{
          $bahasa['url_id'] .= '/'.$link;
        }
        $i++;
      }
      return $bahasa;
    }
    return $bahasa;
  } 
$language = get_lang($_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']);

和我的home.php

<form name="form1" method="post" action="?lang=">
<select name="menu1" onChange="MM_jumpMenu('parent',this,0)">
<?php
if(($language['lang'] == "id") || (empty($language['lang']))) {
?>
<option value="id" selected>ID</option>
<option value="en">EN</option>
<?php
} else {
?>
<option value="id">ID</option>
<option value="en" selected>EN</option>
<?php
} // end else
?>
</select>

和我的.htaccess

 RewriteEngine on
RewriteRule ^([^/]*)$ index.php?mod=home [L]
RewriteRule ^pages/([^/]*)/([^/]*)$ index.php?mod=pages&idp=$1 [L]
RewriteRule ^pages/([^/]*)/([^/]*)$ index.php?mod=pages&idp=$1&page=$2 [L]
RewriteRule ^category/([^/]*)$ index.php?mod=category&idc=$1 [L]
RewriteRule ^category/([^/]*)/([^/]*)$ index.php?mod=category&idc=$1&page=$2 [L]
RewriteRule ^detailpost/([^/]*)$ index.php?mod=detailpost&id=$1 [L]
RewriteRule ^detailpost/([^/]*)/([^/]*)$ index.php?mod=detailpost&id=$1&page=$2 [L]
RewriteRule ^gallery$ index.php?mod=gallery [L]
RewriteRule ^gallery/([^/]*)/([^/]*)$ index.php?mod=gallery&page=$2 [L]
RewriteRule ^contact$ index.php?mod=contact [L]
RewriteRule ^search-result/$ index.php?mod=searchresult [L]
RewriteRule ^search-result/([^/]*)$ index.php?mod=searchresult&search=$1 [L]
RewriteRule ^search-result/([^/]*)/([^/]*)$ index.php?mod=searchresult&search=$1&page=$2 [L]
RewriteRule ^login$ index.php?mod=login [L]
RewriteRule ^register$ index.php?mod=register [L]
RewriteRule ^maintenance$ maintenance.php [L]

当我使用默认语言ID打开myWeb并选择"选项ID/en ent Work"时,问题是当我单击其他页面(例如myweb/pegages/of-us或其他)时,这就是显示Home.php

如何修复它?

我想点击myweb/pegages/about-us成为myweb/pages/about-us/en eN或myweb/pages/about-us/id

感谢您的回答,对不起我的英语不好:D

您必须从pages重写规则之一中删除一些字符(/([^/]*)),类似于所有其他重写规则的方式。

 RewriteEngine on
 RewriteRule ^([^/]*)$ index.php?mod=home [L]
-RewriteRule ^pages/([^/]*)/([^/]*)$ index.php?mod=pages&idp=$1 [L]
+RewriteRule ^pages/([^/]*)$ index.php?mod=pages&idp=$1 [L]
 RewriteRule ^pages/([^/]*)/([^/]*)$ index.php?mod=pages&idp=$1&page=$2 [L]
 RewriteRule ^category/([^/]*)$ index.php?mod=category&idc=$1 [L]
 RewriteRule ^category/([^/]*)/([^/]*)$ index.php?mod=category&idc=$1&page=$2 [L]

最新更新