URL重写并将URL结尾保存为变量

时间:2013-10-05 02:48:32

标签: php .htaccess url-rewriting

我正在使用网址重写让艺术家/(artistname)去艺术家/ index.php?(artistname)。

我使用此代码进行网址重写

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来检查它。有谁知道可能出现的问题?

3 个答案:

答案 0 :(得分:2)

您的重写规则需要修复。看起来您的规则可能会导致重定向循环,这应该会导致服务器500错误,而不会感到意外。尝试更像这样的东西。

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

条件语句应该从循环中消除规则。另外,将[L]标志添加到规则以阻止规则在该点处理更多。

答案 1 :(得分:0)

因为您的新重写规则,删除了parse_url用于Url查询无法正常工作的参数。您可以尝试改为:

$artist = basename(parse_url($pageURL,  PHP_URL_PATH));

答案 2 :(得分:0)

我最终使用不同的方式获取有效的网址

$artist = $_SERVER["REQUEST_URI"];
$artist = substr($artist, 9, -1);