情况:Web项目,这是文件夹结构。
每个文件夹代表该年的网站,在“当前”文件夹中,当您访问www.mydomain.com时应显示该网站。 目标是,如果您访问www.mydomain.com/2017,则会看到2017年的网站。
根文件夹中有一个.htaccess文件,该文件可确保如果导航到“ /”,则将您重定向到当前文件。
我在必须放入“ 2017”文件夹(这是laravel应用程序)的.htaccess文件中挣扎。
www文件夹中的.htaccess文件
<IfModule mod_rewrite.c>
Options +SymLinksIfOwnerMatch
RewriteEngine on
RewriteRule ^(.*)$ current/$1 [L]
</IfModule>
.htaccess文件位于2017文件夹中
<IfModule mod_rewrite.c>
Options +SymLinksIfOwnerMatch
RewriteBase /2017
RewriteEngine on
RewriteRule ^(.*)$ public/$1 [L]
</IfModule>
当前结果:当我访问www.mydomain.com/2017时,我转到2017文件夹,但它转到2017年的“ 2017”页面。要对此进行测试,我将其添加到了我的web.php路由中:
Route::get('/{page}', array('as'=>'renderpage',function ($page) {
dd('I am here and the page you request is '.$page);
}));
其结果是: “我在这里,您要求的页面是2017年”
长话短说:我如何从.htaccess文件的url中删除“ 2017”,以便laravel将www.mydomain.com/2017解释为2017文件夹的根。最好在2017文件夹的.htaccess文件中完成此操作。
编辑: 我将2017文件夹中的.htaccess文件更改为此:
<IfModule mod_rewrite.c>
Options +SymLinksIfOwnerMatch
RewriteBase /2017
RewriteEngine on
RewriteRule ^(/.*|)$ public/$1 [L,NC,R=301]
</IfModule>
现在它可以工作了,除了在URL中,您现在看到www.mydomain.com/2017/public 如何从网址中删除“公开”?
答案 0 :(得分:0)
也许这是在laravel中做的正确方法:
您可以使用以下方法更改控制器中的根目录或路由
$this->app->bind('path.public', function() {
return base_path().'/public_html';
});
我猜你可以在其中插入一个绝对路径。
退房
答案 1 :(得分:0)
无需触摸laravel代码,但使用nginx配置:
server {
listen *:8080;
server_name 2016.test.test;
root /var/www/html/2016;
index index.html index.php;
location / {
try_files $uri $uri/ /index.php$is_args$args;
}
location ~ \.php$ {
fastcgi_index index.php;
include fastcgi_params;
fastcgi_pass 127.0.0.1:9000;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
}
}
server {
listen *:80;
server_name www.test.test;
client_max_body_size 1m;
root /var/www/html/current;
index index.html index.htm;
location /2016/ {
rewrite /2016/(.*) /$1 break;
proxy_pass http://2016.test.test:8080;
proxy_redirect off;
proxy_set_header Host $host;
}
}
文件夹结构:
.
├── 2015
│ └── index.html
├── 2016
│ ├── index.html
│ └── index.php
├── 2017
│ └── index.html
├── current
│ ├── index.html
│ └── test.html
└── index.html
index.php:
<?php
var_dump($_SERVER);
?>
结果调用: http://www.test.test/2016/sample/foo/bar ...
...
'SCRIPT_FILENAME' => string '/var/www/html/2016/index.php' (length=28)
'REDIRECT_STATUS' => string '200' (length=3)
'SERVER_NAME' => string '2016.test.test' (length=14)
'SERVER_PORT' => string '8080' (length=4)
'SERVER_ADDR' => string '127.0.0.1' (length=9)
'REMOTE_PORT' => string '48598' (length=5)
'REMOTE_ADDR' => string '127.0.0.1' (length=9)
'SERVER_SOFTWARE' => string 'nginx/1.14.0' (length=12)
'GATEWAY_INTERFACE' => string 'CGI/1.1' (length=7)
'REQUEST_SCHEME' => string 'http' (length=4)
'SERVER_PROTOCOL' => string 'HTTP/1.0' (length=8)
'DOCUMENT_ROOT' => string '/var/www/html/2016' (length=18)
'DOCUMENT_URI' => string '/index.php' (length=10)
'REQUEST_URI' => string '/sample/foo/bar' (length=15)
'SCRIPT_NAME' => string '/index.php' (length=10)
...
您看到 REQUEST_URI 只是'/ sample / foo / bar'而没有年份
此示例的编码为2016年,您可以轻松地在年份中使用一些正则表达式,例如:20[0-9]{2}
,然后将匹配项替换为适当的变量($ 1或类似的值)