2015-12-21 38 views
0

我已经在我的服务器的根目录中搜索了使用.htaccess文件重写URL的其他解决方案,但该语言对我来说非常混乱,我似乎无法使其工作。我怎么会去改变:重写PHP查询字符串?

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我需要他们在我的页面上的变量。

谢谢!

+0

我很困惑。您可以重写URL以包含查询字符串,但前提是查询字符串存在。你想从第一个URL重定向到第二个URL吗? – showdev

+0

基本上我想漂亮的网址只显示给用户,而真正的网址是什么使用的服务器/ php – user1661677

+0

你是否也想重定向“丑陋的”URL到相应的“漂亮”的? – showdev

回答

1

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

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

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

$1中捕获除可选尾部斜线之外的所有内容,并重写为“媒体”查询字符串变量。

例如:

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

这意味着:

$_GET['media'] = 059ogbuq70


你可能会发现这个mod_rewrite cheat sheet有助于建立你的正则表达式。
另外,您可以在此处test your rewrites

+0

谢谢你的回答,但是这个不是重写该URL,这是干扰我的PHP(从URI参数'媒体='获取变量)。 – user1661677

+0

也许还有其他事情正在发生,或者我不明白你的目标是什么。重写是内部的,所以你不会在浏览器中看到URL更改(重定向)。它似乎在[这里]工作(http://htaccess.mwl.be/)。这可能有助于编辑您的PHP代码到您的问题。 – showdev

+0

我纠正了,输入一个URL:'domain.com/ [some-string]'似乎工作得很好,但我在调用PHP的第3行上的$ media_id变量时遇到了问题。它在URL重写之前工作得很好,并且它在我删除'.htaccess'时有效。 – user1661677

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] 
+0

感谢您的回答,但是这个重定向到:'http:// vipheo.com/fs6e/vipheo/public/83s371n1yi%20HTTP/1.0'并且给了我一个404.任何帮助? – user1661677

+0

@ user1661677对不起,我纠正了规则。小错误。现在整个规则已经完成。如果您没有这样的规则,用户仍然可以使用'http://example.com/share.php?media=13e43'样式的URL。 –