1

我正在使用 url 重写让艺术家/(艺术家名称)转到艺术家/index.php?(艺术家名称)。

我使用此代码进行 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

因为您的新 Rewrite 规则,摆脱了您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 回答