我正在尝试使用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还是有更好的方法来实现这个目标?
由于
答案 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”