重写PHP查询字符串?

时间:2015-12-21 23:09:22

标签: .htaccess

我已经在我的服务器根目录下搜索了使用.htaccess文件重写URL的其他解决方案,但这种语言对我来说非常混乱,我似乎无法让它工作。我将如何改变:

http://domain.com/share.php?media=059ogbuq70

为:

http://domain.com/059ogbuq70

我发现代码与此类似,并尝试过,但它似乎不起作用:

RewriteEngine on
RewriteCond %{QUERY_STRING} ^media=([0-9]+)$
RewriteRule ^$ share.php?media=$1 [QSA,L]

我的PHP:

<?php
$media_id = $_GET['media'];
$url = file_get_contents("https://api.wistia.com/v1/medias/" . $media_id . ".json?api_password=my_key");
$json = json_decode($url, true);
$name = $json[name];
$origimg = $json['thumbnail'][url];
list($image, $size) = explode('?', $origimg);
$video = $json['assets'][5][url];
?>

然后我echo在我的页面上需要它们的变量。

谢谢!

2 个答案:

答案 0 :(得分:1)

要在内部重写“漂亮”的URL以便将查询字符串传递给PHP,我建议使用以下.htaccess文件:

RewriteEngine on
RewriteRule ^([^/]+)/?$ share.php?media=$1 [L]

正则表达式匹配:
一个或多个不是反斜杠的字符,可选地后跟反斜杠。

除了可选的尾部斜杠之外的所有内容都在$1中捕获并重写为“media”查询字符串变量。

例如:

  

http://domain.com/059ogbuq70/
  内部重写为   http://domain.com/share.php?media=059ogbuq70

这意味着:

  

$_GET['media'] = 059ogbuq70

您可能会发现mod_rewrite cheat sheet有助于构建正则表达式 此外,您可以test your rewrites在这里。

答案 1 :(得分:0)

您要执行的操作需要two规则。您可以将其放在名为.htaccess

的文件中
RewriteEngine on

#redirect all old URLs to the new rewritten URL
RewriteCond %{THE_REQUEST} ^GET\ /+share\.php\?media=([^&\ ]+)
RewriteRule ^ /%1? [R=302,L]

#rewrite folder path internally to share.php
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^/]+)/?$ share.php?media=$1 [QSA,L]