我在项目中使用反向代理将路径重定向到其他服务器。
站点1:abc.com(服务器1)
站点2:内容存储在从服务器1的子域映射的不同服务器中 - testsite.abc.com(服务器2)
服务器2中的站点是laravel项目。服务器1中的站点是普通的html站点。
要重定向的apache配置" abc.com/new-url /"到" testsite.abc.com /"使用反向代理是:
<VirtualHost *:80>
ServerName abc.com
ServerAlias www.abc.com
DocumentRoot /var/www/vhosts/abc-livesite
<Directory /var/www/vhosts/abc-livesite>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
</Directory>
ProxyPreserveHost On
<Location "/new-url/">
ProxyPass "http://testsite.abc.com/"
</Location>
</VirtualHost>
laravel路线不适用于&#34; abc.com/new-url /"不使用index.php。但laravel路线适用于&#34; testsite.abc.com /&#34;。
示例:
路线 - &#34; testsite.abc.com/test-route"工作正常。
路线 - &#34; abc.com/new-url/test-route"显示404未找到 错误。但是&#34; abc.com/new-url/index.php/test-route"工作正常。
我认为,在使用反向代理时,覆盖index.php的重写规则不起作用。
网站2的.htaccess文件是:
<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
Options -MultiViews
</IfModule>
RewriteEngine On
# Redirect Trailing Slashes If Not A Folder...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/$ /$1 [L,R=301]
# Handle Front Controller...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
# Handle Authorization Header
RewriteCond %{HTTP:Authorization} .
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
</IfModule>
导致此问题的原因是什么?有人可以帮忙吗?
答案 0 :(得分:1)
这是解决此问题的解决方法。
更新反向代理规则以首先解析静态路径
# Add static path
ProxyPass /assets/js http://example.com/js
ProxyPassReverse /assets/js http://example.com/js
ProxyPass /assets/css http://example.com/css
ProxyPassReverse /assets/css http://example.com/css
# Resolve index.php
ProxyPass /path http://example.com/index.php
ProxyPassReverse /path http://example.com/index.php
这将按优先顺序运作。
我希望这会有所帮助。