0

我需要从 url 获取链接。例如:

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

site.php获取链接http://myfriendsite.com/news/index.php?title=خبر&category=اقتصادی并显示此网址。

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=اقتصادی

4

2 回答 2

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]
于 2013-07-27T12:38:39.570 回答
1

这种 URL 不能在 QUERY_STRING 或 RewriteRule 中被捕获,因为那时 Apache 会重新格式化 URL 并使其http://...变为http:/....

诀窍是使用%{THE_REQUEST}变量,它表示在 Web 服务器接收到的原始 http 请求。

通过启用 mod_rewrite 和 .htaccess httpd.conf,然后将此代码放在您.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:这里需要负前瞻来防止无限循环。

于 2013-07-27T13:50:45.837 回答