Laravel:如何将我的主域重定向到公共的子文件夹?
我有一个Laravel项目,我希望我的主域被重定向到公用文件夹中的子文件夹,但我不希望URL中的Laravel:如何将我的主域重定向到公共的子文件夹?,laravel,.htaccess,redirect,Laravel,.htaccess,Redirect,我有一个Laravel项目,我希望我的主域被重定向到公用文件夹中的子文件夹,但我不希望URL中的public 例如,当我键入example.com时,我希望自动重定向到example.com/english 我知道我可以将example.com重定向到example.com/public/english如下: <IfModule mod_rewrite.c> RewriteEngine on RewriteCond %{HTTP_HOST} ^(www.)?examp
public
例如,当我键入example.com
时,我希望自动重定向到example.com/english
我知道我可以将example.com
重定向到example.com/public/english
如下:
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTP_HOST} ^(www.)?example.com$
RewriteCond %{REQUEST_URI} !^/public/english/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ public/english/$1 [L]
RewriteCond %{HTTP_HOST} ^(www.)?example.com$
RewriteRule ^(/)?$ public/english/ [L]
</IfModule>
<IfModule mod_rewrite.c>
RewriteCond %{REQUEST_URI} !^public/
RewriteRule ^(.*)$ public/$1 [L] #relative substitution
</IfModule>
但是如何将两者结合起来呢?首先,重定向和重写之间的区别: 重定向:更改浏览器地址栏中的URL 重写:浏览器地址栏中的URL不会更改
RewriteRule
上的[R]
标志使其成为重定向。此外,如果主机发生更改,它将是一个重定向。否则,这是一次重写
因此,第1步可能是设置地址栏中的内容,客户端:
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTP_HOST} ^(www.)?example.com$
RewriteCond %{REQUEST_URI} !^/english/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /english/$1 [R,L]
RewriteCond %{HTTP_HOST} ^(www.)?example.com$
RewriteRule ^(/)?$ /english/ [L]
</IfModule>
重新启动发动机
重写cond%{HTTP_HOST}^(www.)?example.com$
重写cond%{REQUEST_URI}^/英式/
重写cond%{REQUEST_FILENAME}-F
重写cond%{REQUEST_FILENAME}-D
重写规则^(.*)$/英文/$1[R,L]
重写cond%{HTTP_HOST}^(www.)?example.com$
重写规则^(/)?$/英语/[L]
但是内容实际上并不存在,所以现在,一旦新请求通过,我们将在服务器端内部重写该请求,以将请求定向到内容的实际位置:
<IfModule mod_rewrite.c>
RewriteCond %{REQUEST_URI} !^public/
RewriteRule ^(.*)$ public/$1 [L] #relative substitution
</IfModule>
重写cond%{REQUEST_URI}^公开的/
重写规则^(.*)$public/$1[L]#相对替换
您应该能够将其组合成一个代码>代码块
除了R
标志外,您还可以指示它是永久重定向还是临时重定向。默认情况下,它将是一个永久重定向(301状态代码)。我通常使用临时重定向[R=302]
对其进行测试,以防出错,直到我确信一切都按预期进行
两种类型的页面流不同:
重定向:客户端-(因此浏览器的地址栏发生更改)
浏览器请求一个页面
服务器响应重定向状态代码
(301:永久,302:已找到,303:见其他,307:临时)
浏览器向新URL发出第二个请求
服务器响应新的URL
重写:服务器端(因此浏览器栏不会更改)
浏览器请求一个页面
URL重写重写URL并请求更新页面
看起来很像最近的这个问题。。。服务器应配置为使文档根目录为公用文件夹,而不是应用程序根目录。这样做是出于安全原因。一旦您将服务器配置为在public
目录外为应用程序提供服务,那么将重定向添加到子目录应该很简单。我不完全清楚您需要什么。内容的实际位置是什么?您希望在地址栏中显示该内容的哪个地址?文件夹/public/english
中的内容,但您希望地址栏显示/english
?(我把https://example.com
prom,仅显示相对地址?)