我正在使用网址重写让艺术家/(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来检查它。有谁知道可能出现的问题?
答案 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);