2

我正在尝试为我的网站提供 URL 缩短服务。

所以而不是:

http://www.myfullwebsitename.com/page78/this-is-a-headline/

用户将能够访问:

http://abc.de/aBxf

需要重定向(不可见!)到

http://abc.de/?shorturl=aBxf

然后 301 通过数据库查找重定向到

http://www.myfullwebsitename.com/page78/this-is-a-headline/

我可以轻松地进行数据库查找和 301 重定向。这是我正在努力解决的隐形中间重定向。

我尝试了很多不同的东西,但似乎没有一个有效。这是我目前认为应该工作的:

RewriteCond %{HTTP_HOST} ^abc.de
RewriteCond %{QUERY_STRING} ^$
RewriteRule ^/(.+)  /?shorturl=$1

但不是默默地重定向到

http://abc.de/?shorturl=aBxF 

它将“嘈杂”(302)重定向到

http://abc.de/aBxF/?shorturl=aBxF 

我究竟做错了什么?

谢谢!

4

2 回答 2

1

您可以尝试几件事。

我认为你的 RewriteRule 应该是这样的(没有 forward /):

RewriteRule ^/(.+)  ?shorturl=$1 [L]

这至少应该阻止它重定向到http://abc.de/aBxF/.

如果您添加以下内容,您的原始规则可能会起作用:

RewriteBase /

如果是我,我的规则实际上是这样的:

RewriteBase /
RewriteCond %{HTTP_HOST} ^abc.de$
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule .  /redirect.php [L]

然后在 PHP 中,我会使用它$_SERVER['REQUEST_URI']来获取 URL(不确定您使用的是什么语言)。

规则可能如下所示:

RewriteRule ^(.*)$  /redirect.php?shorturl=$1 [L]

但我会确保按名称提及脚本。可能使您的规则失效的部分原因是依赖于 Apache 在重写后找到您的索引文件。

Apache 重写规则的工作方式是,一旦 URL 被重写,它实际上会重新运行规则,直到找不到其他规则为止。“最后”的[L]标志说“停在这里” - 但它仍然从顶部重新开始。带有标志的 RewriteCond!-f表示“仅当文件不存在时”。

于 2012-11-22T19:58:44.220 回答
0

使用绝对 URL:

RewriteCond %{HTTP_HOST} ^abc.de
RewriteCond %{QUERY_STRING} ^$
RewriteRule ^(.*)$ http://abc.de/?shorturl=$1 [R=301,L]
于 2012-11-22T19:58:17.823 回答