Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache Can';你不能让mod_rewrite正确地(不可见地)重写我的URL吗?_Apache_Mod Rewrite_Url Rewriting_Short Url - Fatal编程技术网

Apache Can';你不能让mod_rewrite正确地(不可见地)重写我的URL吗?

Apache Can';你不能让mod_rewrite正确地(不可见地)重写我的URL吗?,apache,mod-rewrite,url-rewriting,short-url,Apache,Mod Rewrite,Url Rewriting,Short Url,我正在尝试为我的网站做一个URL缩短服务 因此,不是: http://www.myfullwebsitename.com/page78/this-is-a-headline/ 用户将能够访问: http://abc.de/aBxf 需要重定向(不可见!)到 然后301通过数据库查找重定向到 http://www.myfullwebsitename.com/page78/this-is-a-headline/ 我可以很容易地进行数据库查找和301重定向。这是我正在努力解决的无形中间重定向 我

我正在尝试为我的网站做一个URL缩短服务

因此,不是:

http://www.myfullwebsitename.com/page78/this-is-a-headline/
用户将能够访问:

http://abc.de/aBxf
需要重定向(不可见!)到

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

http://www.myfullwebsitename.com/page78/this-is-a-headline/
我可以很容易地进行数据库查找和301重定向。这是我正在努力解决的无形中间重定向

我试过很多不同的方法,但似乎都不管用。这是我目前认为应该起作用的:

但不是默默地重定向到

http://abc.de/?shorturl=aBxF 
它将“noisely”(302)重定向到

我做错了什么

谢谢大家!

使用绝对URL:

RewriteCond %{HTTP_HOST} ^abc.de
RewriteCond %{QUERY_STRING} ^$
RewriteRule ^(.*)$ http://abc.de/?shorturl=$1 [R=301,L]

有几件事你可以试试

我认为您的重写规则应该是这样的(没有转发
/
):

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

如果您添加以下内容,您的原始规则可能有效:

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

RewriteBase /
RewriteCond %{HTTP_HOST} ^abc.de$
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule .  /redirect.php [L]
RewriteRule ^(.*)$  /redirect.php?shorturl=$1 [L]
然后在PHP中,我将使用
$\u SERVER['REQUEST\u URI']
获取URL(不确定您使用的是什么语言)

规则可以如下所示:

RewriteBase /
RewriteCond %{HTTP_HOST} ^abc.de$
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule .  /redirect.php [L]
RewriteRule ^(.*)$  /redirect.php?shorturl=$1 [L]

但我一定要提到剧本的名字。推翻规则的部分原因可能是依赖Apache在重写后查找索引文件


Apache重写规则的工作方式是,一旦URL被重写,它实际上将重新运行规则,直到找不到其他规则为止。“last”的
[L]
标志上写着“到此为止”-但它仍然从顶部重新开始。用
重写第二个命令-f
标志表示“仅当文件不存在时”。

我不想要302或301。我应该能够重写此URL,而不需要302/301所需的额外HTTP跃点-浏览器/用户不需要知道此中间步骤。好的,我不是很理解,因为您将301和302代码与“可见/不可见”部分混合在一起,两者都不是。我能理解这个问题,但文字令人困惑。看我的编辑。他不想硬重定向,他希望它是内部的,这是它没有做的。硬重定向发生在他的脚本中(我假设是用PHP编写的)。这个应该是内部的,不是吗?我在一些应用程序上做了几次类似的重写(用于url“美化”),而url的“querystring版本”从未显示在浏览器中。是的,应该是,JCL。我不明白出了什么问题。是不是因为HTTP_主机重写条件,我的其他重定向没有?也许这让Apache感到困惑,以为我是在从一个域指向另一个域,如果没有301/302,这显然是不可能的。即使我不是。你的规则似乎没有传递任何东西到redirect.php,或者我误解了什么?你不必-如果是内部重定向,你可以在
$\u SERVER['REQUEST\u URI']
中获取原始url,但我会确保按名称提及脚本。-这就是问题所在。添加index.php之后,一切都会突然变好。谢谢你的帮助,卢克。
RewriteBase /
RewriteCond %{HTTP_HOST} ^abc.de$
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule .  /redirect.php [L]
RewriteRule ^(.*)$  /redirect.php?shorturl=$1 [L]