より信頼性が高く、非常に単純な解決策は次のとおりです。
2つのケースを考えてみましょう。
ケース1:完全なURLリダイレクトが必要な場合は、次の書き換えルールを使用します
RewriteEngine On
#Redirect to app.php/the-rest-of-param
RewriteRule ^mywebsite(.*)$ http://%{HTTP_HOST}/app.php$1 [R=301,L]
URLは以下のように変更されますのでご注意ください
http://hostname.com/mywebsiteからhttp://hostname.com/app.php
http://hostname.com/mywebsite/testからhttp://hostname.com/app.php/test
http://hostname.com/mywebsite/something/anotherからhttp://hostname.com/app.php/something/another
ケース2:完全なリダイレクトが必要ない場合(つまり、URLを変更しない場合)、以下の点を考慮する必要があります。
- この場合、要求されたURLは保持されます(つまり、URLは次のようになります
http://hostname.com/mywebsite/test
)
- エンドユーザーは内部で何が起こっているのかを認識してはいけない
do not need to bypass your request to app.php/test
ので、サーバーのオーバーヘッドはなく、代わりにapp.phpへのリクエストをバイパスします(残りは以下のPHPコードで説明します)
以下のルールを使用するだけです
RewriteEngine On
#No redirection, bypass request to app.php
RewriteRule ^mywebsite(.*)$ app.php
今、あなたはのようなパラメータを取得する必要があります/test
か/something/another
?次のコードブロックを使用して取得します。
$param = '';
if (strpos($_SERVER['REQUEST_URI'], '/mywebsite') === 0) {
//10 => length of "/mywebsite"
$param = substr($_SERVER['REQUEST_URI'], 10);
}
echo 'URL PARAM: ' . $param;
URLの場合http://hostname.com/mywebsite$paramは空の文字列になります
http://hostname.com/mywebsite/testの場合、$paramは次のようになります。/test
http://hostname.com/mywebsite/something/another/1234の場合、$paramは次のようになります。/something/another/1234
不要な条件付きリクエストバイパスを回避し、パラメータなしでapp.phpへのすべてのリクエストをバイパスしたことに注意してください(パラメータはURLとともに存在するため)
あなたは$_SERVER['REQUEST_URI']
のような価値を保持し/something/another/1234
、$_SERVER['PHP_SELF']
に似ていることがわかります/app.php/something/another/1234
これがあなたの問題を解決できることを願っています...