Leiten Sie 301 zu / if url um, das index.php enthält

Mar 26 2020

Ich habe ein Blog in Laravel 5.8 und möchte 301 umleiten. Dort befindet sich index.php in der URL.

Mein .htaccess ist dies

<IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
        Options -MultiViews -Indexes
    </IfModule>

    RewriteEngine On

    # Handle www + https
    RewriteCond %{HTTPS} off [OR]
    RewriteCond %{HTTP_HOST} !^www\. [NC]
    RewriteRule .* https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

    # Redirect if index.php is in the URL
    RewriteCond %{THE_REQUEST} ^GET.*index\.php [NC]
    RewriteRule (.*?)index\.php/*(.*) /$1$2 [R=301,NE,L]

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

    # Redirect Trailing Slashes If Not A Folder...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_URI} (.+)/$
    RewriteRule ^ %1 [L,R=301]

    # Handle Front Controller...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]
</IfModule>

Ich habe diesen Ansatz ausprobiert:

    # Redirect if index.php is in the URL
    RewriteCond %{THE_REQUEST} ^GET.*index\.php [NC]
    RewriteRule (.*?)index\.php/*(.*) /$1$2 [R=301,NE,L]

Das Problem ist jedoch, dass es eine URL wie diese gibt, die (? get_params) enthält.

htts://www.example.com/index.php?test

es wird 301 zu /? test umleiten

Wie kann ich die Regel ändern, um 301 nach / (ohne? Params) umzuleiten, wenn die URL index.php enthält?

Antworten

4 jeprubio Mar 26 2020 at 12:56

Sie können das QSD-Flag (Query String Discard) verwenden, um umzuleiten, ohne die Abfragezeichenfolge zu übergeben.

Wenn der angeforderte URI eine Abfragezeichenfolge enthält und der Ziel-URI nicht, besteht das Standardverhalten von RewriteRule darin, diese Abfragezeichenfolge in den Ziel-URI zu kopieren. Die Verwendung des Flags [QSD] bewirkt, dass die Abfragezeichenfolge verworfen wird.

# Redirect if index.php is in the URL
RewriteCond %{THE_REQUEST} ^GET.*index\.php [NC]
RewriteRule (.*?)index\.php /$1 [R=301,NE,L,QSD]