2012-05-14 59 views
0

我试图找出一个URL重写,但我完全没有用重写规则。使用.htaccess重写URL(多国语言)

我想以下几点:

/en/catalog/myname.html -> /catalog.php?id=myname&lang=en 
/de/katalog/myname.html -> /catalog.php?id=myname&lang=de 
/en/view/123 -> /view.php?id=123&lang=en 

如何将重写规则是什么样子?

感谢您的任何帮助和/或建议!

回答

1

如果您不想将所有可能的翻译列表(catalog-katalog,view-something等)包含到.htaccess文件中,则创建单独的php脚本将更容易,该脚本将处理路由。例如:

RewriteRule ^(en|de)/([^/]+)/(.+)\.html$ router.php?lang=$1&section=$2&id=$3 [L,QSA] 

router.php可能是例如:

<?php 

// List of translations 
$german = array(
    'katalog' => 'catalog', 
    'something' => 'view', 
    ... 
); 

// List of available sections 
$allowed = array('catalog', 'view'); 

$section = $_GET['section']; 
if ($_GET['lang'] === 'de') { 
    $section = isset($german[$section])? $german[$section] : NULL; 
} 

// IMPORTANT: Include PHP file only if section param is listed in $allowed! 
// Otherwise attacker could execute any file on the server 
// by opening /router.php?section=badfile 

if (in_array($section, $allowed)) { 
    include dirname(__FILE__) . "/$section.php"; 

} else { 
    header('HTTP/1.x 404 Not Found'); 
    print "Page not found"; 
} 
+0

你好,非常感谢您的回复!很好的解决方案,但最好我希望它在.htaccess –

+0

如果你只有几个部分,你可以做一些像'RewriteRule^en/SECTIONNAME /(。+)\。html $ SECTIONSCRIPT.php?lang = en&id = $ 1 [ L,QSA]''为每种语言和部分组合,例如:'RewriteRule^de/katalog /(。+)\。html $ catalog.php?lang = de&id = $ 1 [L,QSA]' –