.htaccess 语言漂亮 URL

.htaccess Pretty URL with languages

我有一个php网站,加载页面如下。

    if ( $secretfile && file_exists( $moddir . $name . "/" . $secretfile . ".php" ) ) {
  include_once( $moddir . $name . "/" . $secretfile . ".php" );
} else {
  if ( isset( $_GET[ 'mod' ] ) ? $_GET[ 'mod' ] : '' ) {
    $secretmodule = isset( $_GET[ 'mod' ] ) ? $_GET[ 'mod' ] : '';
    if ( $secretmodule && file_exists( $moddir . $name . "/page.php" ) ) {
      include_once( $moddir . $name . "/page.php" );
    } else {
      include_once( $moddir . "404.php" );
    }
  } else {
    include_once( $moddir . "homepage.php" );
  }
}

我正在使用 htaccess 来美化 url 如下。

RewriteRule ^([^/]*)/$ /index.php?mod= [L]
RewriteRule ^([^/]*)/([^/]*)/$ /index.php?mod=&file= [L]
RewriteRule ^([^/]*)/([^/]*)/([^/]*)/$ /index.php?mod=&file=&proid= [L]

我想在会话中添加语言,但我不想更改主要语言(已编入索引)的 url。只有其他语言会添加一个额外的变量。

eg: 
main language(de) : www.site.com/module/file/     /index.php?mod=&file= [L]
other lang (en) : www.site.com/en/module/file/    /index.php?lang=mod=&file= [L]
other lang (fr) : www.site.com/fr/module/file/    /index.php?lang=mod=&file= [L]

我只是不确定如何为这些配置设置 htaccess。

根据您显示的尝试,请尝试以下操作。确保你的 index.php 文件和 htaccess 这两个文件都存在于你的情况下的同一个文件夹(root)中。

请确保在测试您的 URL 之前清除您的浏览器缓存。

RewriteEngine ON
##Rules for en OR fr languages URLs to be rewritten in backend.
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(en|fr)/([^/]*)/([^/]*)/?$ /index.php?lang=mod=&file= [QSA,NC,L]

##Rules for links which are not started with en OR fr links.
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]*)/([^/]*)/?$ /index.php?lang=mod=&file= [QSA,NC,L]

您可以在 .htaccess 中拥有这些规则集:

RewriteEngine On

# ignore all files are directories from rules below
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]

# rules with any lang component
RewriteRule ^(en|fr)/([^/]*)/$ index.php?lang=&mod= [L,QSA]
RewriteRule ^(en|fr)/([^/]*)/([^/]*)/$ index.php?lang=&mod=&file= [L,QSA]
RewriteRule ^(en|fr)/([^/]*)/([^/]*)/([^/]*)/$ index.php?lang=&mod=&file=&proid= [L,QSA]

# rules without any lang component
RewriteRule ^([^/]*)/$ index.php?lang=de&mod= [L,QSA]
RewriteRule ^([^/]*)/([^/]*)/$ index.php?lang=de&mod=&file= [L,QSA]
RewriteRule ^([^/]*)/([^/]*)/([^/]*)/$ index.php?lang=de&mod=&file=&proid= [L,QSA]