.htaccess 如何在Laravel中使用. htaccess重定向具有相同查询字符串的域

7uzetpgm  于 2022-11-30  发布在  其他
关注(0)|答案(1)|浏览(155)

我正在尝试将具有相同路径(查询字符串)的域重定向到另一个域。在前端,我们使用的是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]
mjqavswn

mjqavswn1#

# CustomRedirect start
RewriteCond %{HTTP_HOST} ^xxx.io$ [OR]
RewriteCond %{HTTP_HOST} ^yyy.lt$
RewriteRule ^(.*)$ https://test.lt/$1 [L,QSA,R=302]
# CustomRedirect end

你把这个重定向规则放在了错误的位置。它应该放在文件的顶部。你把它放在了内部重写到index.php(Laravel前端控制器)之后,所以它自然会重定向到index.php,而不是你请求的URL路径。
(It只有在您请求其他域中的一个物理文件或目录时,才会按预期进行重定向,因为在这种情况下,请求不会被重写为index.php。)
QSA标志在这里也是多余的。默认情况下,查询字符串被附加。

  • 旁白 *

具有相同的路径(查询字串)
URL的“路径”部分不是“查询字符串”。您的示例只包含URL路径,在您发布的示例中没有“查询字符串”。查询字符串是URL中第一个?(问号)之后的部分。但是,上述规则将同时保留URL路径和查询字符串(如果有)。

# Handle Authorization Header
RewriteCond %{HTTP:Authorization} .
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

这个规则也在错误的位置。它需要在# Handle Front Controller...规则 * 之前 *,而不是在它之后。目前,这个规则没有做任何事情(也许你不需要它)。

RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} -f [OR]
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} -d

RewriteRule ^.*$ - [NC,L]
RewriteRule ^(.*) index.html [NC,L]

同样地,这个规则块(在文件的末尾)也没有做任何事情。请求将首先被重写到index.php(Laravel前端控制器)。(你不能同时做这两件事。)

相关问题