一般に、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
変更するのは気が進まないようです。それに応じて応答を変更しましたが、英語のパス自体を処理するように既存のスクリプトを変更するのが最も簡単な方法であることを覚えておいてください。