1

URL 書き換えを使用して、artists/(artistname) を artist/index.php?(artistname) に移動させています。

このコードを使用して、URL の書き換えを行います

RewriteRule    ^artists/(.+)$    artists/index.php?$1 

次に、このコードを使用して、URL の ? の後の部分を取得します。変数として保存します

$pageURL = 'http';
 $pageURL .= "://";
 if ($_SERVER["SERVER_PORT"] != "80") {
  $pageURL .= $_SERVER["SERVER_NAME"].":".$_SERVER["SERVER_PORT"].$_SERVER["REQUEST_URI"];
 } else {
  $pageURL .= $_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"];
 }
$artist = parse_url($pageURL,  PHP_URL_QUERY);

このコードは、URL 書き換えを使用しない場合は機能しますが、使用する場合は機能しません。$artist をエコーし​​て確認しました。誰が何がうまくいかないのか知っていますか?

4

3 に答える 3

2

書き換えルールを修正する必要があります。ルールによってリダイレクト ループが発生する可能性があるようです。これにより、サーバー 500 エラーが発生するはずですが、そうではないことに驚きました。このようなことをもっと試してみてください。

RewriteCond %{REQUEST_URI} !^/artists/index.php.*
RewriteRule ^artists/(.+)$    artists/index.php?$1 [L]

条件ステートメントは、ルールのループを排除する必要があります。さらに、ルールに [L] フラグを追加して、その時点でルールがそれ以上処理されないようにします。

于 2013-10-05T03:21:30.823 に答える
0

新しい書き換えルールはparse_url、Url クエリのパラメーターを削除するため、機能しません。代わりに試すことができます:

$artist = basename(parse_url($pageURL,  PHP_URL_PATH));
于 2013-10-05T03:19:11.047 に答える
0

私は別の方法を使用して、機能するURLを取得することになりました

$artist = $_SERVER["REQUEST_URI"];
$artist = substr($artist, 9, -1);
于 2013-10-05T03:22:11.027 に答える