1

この種のURLを持つドメインwww.domain.comがあります

www.domain.com/my-italian-page.html (他の htaccess ルールによって既に書き換えられています)

次のような偽の多言語 URL を作成したい

www.domain.com/my-english-page.html

ユーザーはアドレスバーにリライター URL www.domain.com/my-english-page.htmlを表示しますが、表示したいコンテンツは元のwww.domain.com/my-italian-page.html です。 .

私は共有サーバーを使用しているため、Apache vhost ルールを使用できないため、htaccess を介して解決策を見つける必要があります。

誰かが正しい方法を見つけるのを手伝ってくれませんか?

ありがとう

4

2 に答える 2

1

イタリア語のコンテンツを指す英語の URL が必要ですか? これらの書き換えルールを生成する php スクリプトが翻訳を行うことを願っています。ただし、ページごとにこれを行います。

RewriteRule ^/?english-page.html$ /italian-page.html [L]

あなたのページごとに。

于 2012-08-26T17:52:57.713 に答える
0

一般に、Web サーバーで実行されるコードをできるだけ小さくしたいので、ページごとに書き換えルールを設定することは通常はお勧めできません。SEO URL が有効になっている場合、ほとんどの CMS が機能する方法でこれを実装することをお勧めします。

  • 任意の URL ( mydomain/anytext.html[実際には .html 拡張子も使用しないでください]) をスクリプト (例: ) にmydomain.tld/translate.php書き換えます。

  • 正しいページを表示するには、 $_SERVER['PATH_INFO'](を含む必要があります)のコンテンツを使用してくださいanytext.html

  • ページが存在しない場合は、正しい HTTP 応答コードを設定しhttp_response_code(...)ます

サンプル .htaccess (実際には、もともと「盗まれた」もので、typo3 セットアップから大幅に変更されています)

RewriteEngine On

# Uncomment and modify line below if your script is not in web-root
#RewriteBase / 
RewriteCond %{REQUEST_FILENAME} !-s
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule (.*) translate.php$1 [L]

非常に基本的な疑似コードのようなもの (テストされていないため、構文エラーがある可能性があります) の例:

<?php
// using a database? you have to escape the string
$db = setup_db();
$page = db->escape_string(basename($_SERVER['PATH_INFO']));
$page = my_translate_query($page);

// no database? do something like this.
$trans = array( 'english' => 'italian', 'italian' => 'italian' );
$page = 'default-name-or-empty-string';
if(isset($_SERVER['PATH_INFO'])) {
   if(isset($trans[basename($_SERVER['PATH_INFO'])])) {
      $page = $trans[$trans[basename($_SERVER['PATH_INFO'])]];
   }
   else {
      http_response_code(404);
      exit();
   }
}

// need to redirect to another script? use this (causes reload in browser)
header("Location: otherscript.php/$page");
// you could also include it (no reload), try something like this
$_SERVER['PATH_INFO'] = '/'.$page;
// you *may* have to modify other variables like $_SERVER['PHP_SELF']
// to point to the other script
include('otherscript.php');
?>

あなたの回答で、別のスクリプトがあることがわかりました--dispatcher.php変更するのは気が進まないようです。それに応じて応答を変更しましたが、英語のパス自体を処理するように既存のスクリプトを変更するのが最も簡単な方法であることを覚えておいてください。

于 2012-08-27T10:53:21.963 に答える