我正在尝试将具有相同路径(查询字符串)的域重定向到另一个域。在前端,我们使用的是Angular应用程序,后端是Laravel。我尝试使用下面的**.htaccess**,但它不使用该路径。它只是重定向到index.php页面。
- 我想要这个:网站xxx.com/this-is/the-path-〉yyy.com/this-is/the-path
- 但我得到这个:网站xxx.com/this-is/the-path-〉yyy.com/index.php
<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>
# -- REDIRECTION to https (optional):
# If you need this, uncomment the next two commands
# RewriteCond %{HTTPS} !on
# RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
# --
# CustomRedirect start
RewriteCond %{HTTP_HOST} ^xxx.io$ [OR]
RewriteCond %{HTTP_HOST} ^yyy.lt$
RewriteRule ^(.*)$ https://test.lt/$1 [L,QSA,R=302]
# CustomRedirect end
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} -f [OR]
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^(.*) index.html [NC,L]
1条答案
按热度按时间mjqavswn1#
你把这个重定向规则放在了错误的位置。它应该放在文件的顶部。你把它放在了内部重写到
index.php
(Laravel前端控制器)之后,所以它自然会重定向到index.php
,而不是你请求的URL路径。(It只有在您请求其他域中的一个物理文件或目录时,才会按预期进行重定向,因为在这种情况下,请求不会被重写为
index.php
。)QSA
标志在这里也是多余的。默认情况下,查询字符串被附加。具有相同的路径(查询字串)
URL的“路径”部分不是“查询字符串”。您的示例只包含URL路径,在您发布的示例中没有“查询字符串”。查询字符串是URL中第一个
?
(问号)之后的部分。但是,上述规则将同时保留URL路径和查询字符串(如果有)。这个规则也在错误的位置。它需要在
# Handle Front Controller...
规则 * 之前 *,而不是在它之后。目前,这个规则没有做任何事情(也许你不需要它)。同样地,这个规则块(在文件的末尾)也没有做任何事情。请求将首先被重写到
index.php
(Laravel前端控制器)。(你不能同时做这两件事。)