使用Laravel我将php页面生成到名为webpage
的子目录中。我想允许用户使用子域访问页面。例如,我在whoami.php
目录中生成了一个文件webpage
。如果有人试图访问whoami.domain.com
,他可以看到whoami.php
。我在index.php
内创建了webpage
,它可以提取别名并显示文件。我需要的是将子域传递给index.php文件而不重定向。我写了htaccess如下
<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
Options -MultiViews
</IfModule>
RewriteEngine On
# Redirect Trailing Slashes...
RewriteRule ^(.*)/$ /$1 [L,R=301]
# Handle Front Controller...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
#sub domain custom part
RewriteCond %{HTTPS} off
RewriteCond %{HTTP_HOST} ^(.*)\.domain\.com
RewriteRule ^(.*)$ http://domain.com/webpage/%1/$1 [L,NC,QSA]
</IfModule>
但我正在重定向到http://domain.com/webpage/whoami
。
我试图清楚地表达我的要求并粘贴我尝试过的东西。能帮我解决一下吗?
编辑1
根据@ Starkeen的回答,我在重定向循环(http://whoami.domain.com/webpage/whoami/webpage/whoami/......
)中尝试了以下代码。
<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
Options -MultiViews
</IfModule>
RewriteEngine On
#sub domain
RewriteCond %{HTTPS} off
RewriteCond %{HTTP_HOST} ^(.*)\.domain\.com$
RewriteRule ^(.*)$ /webpage/%1/$1 [L,NC,R]
# Redirect Trailing Slashes...
RewriteRule ^(.*)/$ /$1 [L,R=301]
# Handle Front Controller...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
</IfModule>
答案 0 :(得分:1)
要将子域重定向到子文件夹,您可能需要在&#34; RewriteEngine On&#34;之后放置以下内容。 line:
RewriteCond %{HTTP_HOST} ^(sub)\.domain\.com$
RewriteRule ^(.*)$ /webpage/%1/$1 [NC,R,L]
答案 1 :(得分:0)
我得到了一个简单的解决方案。当我使用Laravel并且已经使用$link = "http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";
$link = str_replace(array('http://', 'https://', 'www.'), '', $link);
$splitted = explode(".", $link);
if($splitted[0] != 'domain'){
$file_name = $splitted[0].'.php';
$file_loc = 'webpage/'.$file_name;
if(file_exists($file_loc)) {
include($file_loc);
} else {
header('Location: http://domain.com/not-found');
}
die();
}
作为引导程序时,我在那里编写了一些PHP代码来实现我的目标。你们可以根据需要使用。如果我的解决方案不够好,请告诉我。感谢
我的解决方案
public static void aMethodCaller(){
if (_frmMain.InvokeRequired)
_frmMain.Invoke(new Action(aMethod));
else
aMethod();
}