apache - 无法让 mod_rewrite 正确(且不可见地)重写我的 URL?

我正在尝试为我的网站提供 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/

相关文章:

url - 短网址冲突。更喜欢项目还是项目列表?

asp.net - IIS 和 ASP.NET 堆栈上短 URL 的设计与实现

mongodb - 在分布式数据存储中生成短 URL

url - 谷歌短网址如何运作?

android - Android 应用程序上的 Urlshortener 和 403 错误

javascript - 使用 JSON 使用 Javascript 缩短 URL

url - 是否有用于将短网址翻译回常规链接的 API?

php - 我的站点 htaccess 需要短 URL

php - 如何使用短 URL 将用户重定向到自定义表单?

php - 修改 url 更短的脚本