【问题标题】:how to rewrite link with .htaccess如何用 .htaccess 重写链接
【发布时间】:2016-06-25 03:07:59
【问题描述】:

我有这样的功能

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 它的工作时,问题是当我点击其他页面时,如 myweb/pages/about-us 或其他页面,仅显示 home.php

如何解决?

我想在我点击 myweb/pages/about-us 的地方变成 myweb/pages/about-us/en 或 myweb/pages/about-us/id

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

【问题讨论】:

    标签: php .htaccess mod-rewrite url-rewriting


    【解决方案1】:

    您必须从您的 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]
    

    【讨论】:

    • 感谢@cnst 的回答,当我转到仍然显示 home.php 的 myweb/pages/about-us 并且我尝试选择 en、page仍然显示 home.php 和 ilnk 成为 mysite/pages/en
    • 我看不出您的编辑如何解决我关于什么不起作用的问题。
    猜你喜欢
    • 1970-01-01
    • 2014-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-25
    • 1970-01-01
    • 2021-12-23
    相关资源
    最近更新 更多