我正在尝试为我的网站制作网址缩短服务。
所以而不是:
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
我做错了什么?
谢谢!
答案 0 :(得分:1)
你可以尝试一些事情。
我认为您的RewriteRule应该如下所示(没有转发/
):
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,它就会重新运行规则,直到找不到其他规则。 “last”的[L]
标志表示“停在这里” - 但它仍然从顶部开始。带有!-f
标志的RewriteCond表示“仅当文件不存在时”。
答案 1 :(得分:0)
使用绝对网址:
RewriteCond %{HTTP_HOST} ^abc.de
RewriteCond %{QUERY_STRING} ^$
RewriteRule ^(.*)$ http://abc.de/?shorturl=$1 [R=301,L]