2013-07-27 166 views
0

我需要從url中獲取鏈接。 例如:RewriteRule獲取鏈接的網址

http://mysite.com/site/http://myfriendsite.com/news/index.php?title=خبر&category=اقتصادی 

site.php獲取鏈接http://myfriendsite.com/news/index.php?title=خبر&category=اقتصادی,並出示此URL。

site.php代碼:

<?php 
if(isset($_GET['url_rss'])) 
{ 
    echo $_GET['url_rss']; 
} 
else 
{ 
    echo '<h2>Error 404</h2>'; 
} 
?> 

我的.htaccess

Options +FollowSymLinks 
RewriteEngine On 

RewriteRule ^site/(.*) site.php?url=$1 

但我看到http:/myfriendsite.com/news/index.php代替http://myfriendsite.com/news/index.php?title=خبر&category=اقتصادی

+0

你的URL的路徑部分只包含'site/http:// myfriendsite.com/news/index.php' - '?'是查詢字符串後的其餘部分,而RewriteRule模式不會捕獲。您應該正確地在'/ site /'之後對URL進行URL編碼,因爲您顯然正在嘗試將整個文本''作爲一個參數值來處理'http://myfriendsite.com/news/index.php?title=خبر&category =اقتصادی'。 – CBroe

回答

1

您需要使用的條件來獲得查詢字符串或標誌QSA在末尾附加它:

RewriteCond %{QUERY_STRING} ^(.*)$ 
RewriteRule ^site/(.*) site.php?url=$1\?%1 [B] 

你可以在你的site.php使用如下:

$path = $_SERVER['REQUEST_URI']; 
$url = substr($path, 6, strlen($path)); 

有了這個規則,它可以把你myfriendsite.com/news/index.php?title=خبر&category=اقتصادی

RewriteCond %{QUERY_STRING} ^(.*)$ 
RewriteRule ^site/[^/]*/(.*)$ site.php?url=$1\?%1 [B] 
+0

謝謝。我測試這個代碼。但結果是:'http:/myfriendsite.com/news/index.phptitle=خبر',但真正的鏈接是:'http://myfriendsite.com/news/index.php?title=خبر&category =اقتصادی' – mghhgm

+0

@mghhgm yes &是它被拆分爲2個查詢字符串的問題我正在尋找一種方法來解決這個問題。 – Prix

+0

@mghhgm我發現了一個使用B標誌的選項,但它會弄亂你的阿拉伯語文本(如果不是阿拉伯語,請諒解) – Prix

1

這種URL不能在QUERY_STRING被捕獲或在RewriteRule中,因爲那時Apache會重新格式化URL並將http://...設置爲http:/...

訣竅是使用%{THE_REQUEST}變量,它表示在Web服務器上接收到的原始http請求。

啓用mod_rewrite的,並通過httpd.conf的.htaccess,然後把這個代碼在你.htaccessDOCUMENT_ROOT目錄:

Options +FollowSymLinks -MultiViews 
# Turn mod_rewrite on 
RewriteEngine On 

RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/+site/([^\s]+) [NC] 
RewriteRule (?!^site\.php$)^ /site.php?url=%1 [L,B,NC] 

PS:負先行這裏需要防止無限循環。

+1

不錯的人不知道重新格式化。 – Prix