我正在尝试为我的网站提供 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
我做错了什么?
谢谢!
最佳答案
您可以尝试一些事情。
我认为你的 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 表示“仅当文件不存在时”。
https://stackoverflow.com/questions/13519096/