Regex 尝试使用重写规则同时匹配子域和路径,仅获取子域
我正在一个本地项目中做一些测试(使用vhost)。我已经设法创建了一个重写规则,将Regex 尝试使用重写规则同时匹配子域和路径,仅获取子域,regex,apache,.htaccess,mod-rewrite,Regex,Apache,.htaccess,Mod Rewrite,我正在一个本地项目中做一些测试(使用vhost)。我已经设法创建了一个重写规则,将something.kensaku.com重定向到www.kensakuapp.com/something,但我想将something.kensaku.com/myapp重定向到www.kensakuapp.com/something/myapp 我的重写规则如下: Options +FollowSymLinks RewriteEngine On RewriteCond %{HTTP_HOST} ^(^.*)\.
something.kensaku.com
重定向到www.kensakuapp.com/something
,但我想将something.kensaku.com/myapp
重定向到www.kensakuapp.com/something/myapp
我的重写规则如下:
Options +FollowSymLinks
RewriteEngine On
RewriteCond %{HTTP_HOST} ^(^.*)\.kensaku.com
RewriteRule ^(^.*) goto.php?username=%1&path=$1
我已经试了几个小时了,但仍然无法获得/myapp
部分。如果我转到something.kensaku.com/myapp
,$1
将匹配goto.php
,但它不应该匹配/myapp
下面是我用于重定向的goto.php
脚本的内容:
<?php
$user = $_GET['username'];
header("Location: http://www.kensakuapp.com/$user/".$_GET['path']);
?>
编辑2:以下是虚拟主机:
# Kensaku Domains
<VirtualHost *:80>
ServerAdmin admin@kensaku.com
DocumentRoot /opt/lampp/htdocs/kensaku
ServerName kensaku.com
ServerAlias *.kensaku.com
</VirtualHost>
<VirtualHost *:80>
ServerAdmin admin@kensaku.com
DocumentRoot /opt/lampp/htdocs/kensakuapp
ServerName kensakuapp.com
ServerAlias *.kensakuapp.com
</VirtualHost>
#Kensaku域
服务器管理员admin@kensaku.com
DocumentRoot/opt/lampp/htdocs/kensaku
服务器名kensaku.com
ServerAlias*.kensaku.com
服务器管理员admin@kensaku.com
DocumentRoot/opt/lampp/htdocs/kensakuapp
服务器名kensakuapp.com
ServerAlias*.kensakuapp.com
在没有看到您的日志的情况下,我不能完全确定,但我的第一个猜测是您需要将传递标志([PT]
)添加到您的规则中:
RewriteRule ^(.*) /goto.php?username=%1&path=$1 [PT]
除了PT
标志外,我还删除了您规则中错误的双精度^
,并明确了goto.php
的路径(这可能是必需的,也可能不是必需的,但可能是良好的做法)。关于PT
标志,请记住mod_rewrite
文档中的内容:
默认情况下,mod_rewrite将URL映射到文件系统路径
重写的目标(goto.php?…
)不是文件系统路径,因此需要Apache对其进行进一步处理。passthrough
标志是这样做的:
强制将生成的URI传递回URL映射引擎,以处理其他URI到文件名转换器,例如别名或重定向
如果这不能解决问题,请按要求发布日志,我们可以在不查看日志的情况下仔细查看日志。我不完全确定,但我的第一个猜测是,您需要在规则中添加传递标志(
[PT]
):
RewriteRule ^(.*) /goto.php?username=%1&path=$1 [PT]
除了PT
标志外,我还删除了您规则中错误的双精度^
,并明确了goto.php
的路径(这可能是必需的,也可能不是必需的,但可能是良好的做法)。关于PT
标志,请记住mod_rewrite
文档中的内容:
默认情况下,mod_rewrite将URL映射到文件系统路径
重写的目标(goto.php?…
)不是文件系统路径,因此需要Apache对其进行进一步处理。passthrough
标志是这样做的:
强制将生成的URI传递回URL映射引擎,以处理其他URI到文件名转换器,例如别名或重定向
如果这不能解决问题,请按要求发布日志,我们可以仔细查看这里不需要PHP 只需将所需的零件捕获到一个列表中,并在替换中使用它们即可
RewriteEngine on
RewriteCond %{HTTP_HOST} ^(.+?)\.kensaku\.com$
RewriteRule ^.*$ http://www.kensakuapp.com/%1/$0 [R,L]
这将在
%1
中的RewriteCond中捕获某物
,并在$0
中的RewriteRule中捕获myapp
,此处不需要PHP
只需将所需的零件捕获到一个列表中,并在替换中使用它们即可
RewriteEngine on
RewriteCond %{HTTP_HOST} ^(.+?)\.kensaku\.com$
RewriteRule ^.*$ http://www.kensakuapp.com/%1/$0 [R,L]
这将在
%1
中的RewriteCond中捕获something
,并在$0
中的RewriteRule中捕获myapp
中的something使用RewriteLog
和RewriteLogLevel
启用日志记录,并发布相关日志。已使用Olaf的规则尝试转到www.kensaku.com
。启用使用RewriteLog
和RewriteLogLevel
进行日志记录,并发布相关日志。已使用Olaf规则尝试将日志转到www.kensaku.com
。由于www.kensaku.com
也应重定向到kensakuapp.com/www
,我可以删除第一个重写条件,我不能吗?它也不能工作-转到www.kensaku.com
给了我一个重定向循环错误…对你的第一个评论是的。我刚刚又测试了一遍,然后olaf.kensaku.com/test
重定向到www.kensakuapp.com/olaf/test
,与www.kensaku.com/tast
相同,后者重定向到www.kensakuapp.com/www/tast
。这里没有循环。您的.htaccess或服务器配置中是否有可能导致此问题的其他规则?不,我在htaccess或httpd.conf中都没有任何其他规则…@AddisonMontgomery我修改了规则以捕获根目录。我重读了你的问题,我想,我第一次错过了一些事实。您是否有两个独立的虚拟主机?一个用于*.kensaku.com
和一个用于www.kensakuapp.com
?由于www.kensaku.com
也应该重定向到kensakuapp.com/www
,我可以删除第一个重写,不是吗?它也不起作用-转到www.kensaku.com
给了我一个重定向循环错误…对你的第一条评论是的。我刚刚又测试了一遍,然后olaf.kensaku.com/test
重定向到www.kensakuapp.com/olaf/test
,与www.kensaku.com/tast
相同,后者重定向到www.kensakuapp.com/www/tast
。这里没有循环。您的.htaccess或服务器配置中是否有可能导致此问题的其他规则?不,我在htaccess或httpd.conf中都没有任何其他规则…@AddisonMontgomery我修改了规则以捕获根目录。我重读了你的问题,我想,我第一次错过了一些事实。您是否有两个独立的虚拟主机?一个用于*.kensaku.com
,一个用于www.kensakuapp.com
?