使用mod_rewrite将URL中的域重定向到php脚本

时间:2010-07-14 12:43:23

标签: .htaccess mod-rewrite

我正在尝试使用mod_rewrite将站点URL中的域重定向到php脚本。例如:

http://example.com/http://somedomain.com

应该重定向到:

http://example.com/test.php?domain=http://somedomain.com

我尝试使用以下RewriteRule

执行此操作
RewriteEngine On
RewriteRule ^(.*)$ /test.php?domain=$1 [L]
但是我没有运气。有没有人知道使用正确的RewriteRule还是有更好的方法来实现这个目标?

由于

2 个答案:

答案 0 :(得分:0)

可以执行此操作,但前提是在 per-server 上下文中指定了RewriteRule,这意味着您必须能够编辑{{}的配置1}}或一般服务器(VirtualHost)。在这种情况下,您拥有的规则可以正常工作。

httpd.conf中定义规则不起作用,因为这发生在Apache的请求处理的修复阶段,这是在Apache尝试将请求映射到文件系统之后(因此在Apache错误输出请求之后) )。如果您无权访问必要的配置文件,则最明显的解决方法是不将.htaccess方案作为URL的一部分传递。

您的规则仍然有效,但由于http://在每个目录上下文中的工作方式,您可能应该对其进行调整以防止重定向循环(mod_rewrite和显式捕获组是也没必要):

L

downforeveryoneorjustme.com而言,它正在Google前端服务器上运行,据说它是Apache的修改版本(虽然我自己没有做太多检查),所以我想他们已经走了第一种选择,或者有一些完全不同的系统;我不确定。

答案 1 :(得分:0)

刚想出来(一个月后!)并决定分享,这样可能对其他人有帮助。

使用以下.htaccess文件将所有请求重定向到index.php文件(或任何您想要的位置)。

<IfModule mod_rewrite.c>

#Checks to see if the user is attempting to access a valid file,
#such as an image or css document, if this isn't true it sends the
#request to index.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?/$1 [L]

</IfModule>

现在我们可以使用$ _SERVER ['REQUEST_URI']来获取请求的URI。

例如,如果请求的网址为http://example.com/http://google.com,则$ _SERVER ['REQUEST_URI']将设置为“http://google.com