Как мне выполнить перенаправление htaccess с пустыми параметрами запроса?

#apache #.htaccess #mod-rewrite #url-rewriting

#apache #.htaccess #мод-перезапись #переписывание URL

Вопрос:

Мне нужно перенаправить URL-адрес моего магазина https://example.com/shop/?mylogout= на https://myshop.com/shop/my-account/?mylogout= (добавив недостающий /my-account/ в середине URL-адреса).

Я попробовал это в .htaccess файле внутри /shop/ папки:

 Redirect 301 /?mylogout= https://example.com/shop/my-account/?mylogout=
  

И это:

 Redirect 301 /shop/?mylogout= https://example.com/shop/my-account/?mylogout=
  

И это в моем основном .htaccess в корне example.com :

 Redirect 301 /shop/?mylogout= https://example.com/shop/my-account/?mylogout=
  

Я предположил, что ничего из этого не сработало, потому что пустой параметр запроса все портит.
Как я могу заставить это работать?

Мой HTACCESS в /shop/.htaccess приведен ниже, а мой домен изменен на mydomain.net:

 # ~~start~~ Do not remove this comment, Prestashop will keep automatically the code outside this comment when .htaccess will be generated again
# .htaccess automaticaly generated by PrestaShop e-commerce open-source solution
# http://www.prestashop.com - http://www.prestashop.com/forums

<IfModule mod_rewrite.c>
<IfModule mod_env.c>
SetEnv HTTP_MOD_REWRITE On
</IfModule>

RewriteEngine on

RewriteCond %{REQUEST_URI} ^/?$ [NC]
RewriteCond %{QUERY_STRING} ^mylogout= [NC]
RewriteRule ^(.*)$ /my-account/?%{QUERY_STRING} [NE,NC,L]

#Domain: mydomain.net
RewriteRule . - [E=REWRITEBASE:/shop/]
RewriteRule ^api(?:/(.*))?$ %{ENV:REWRITEBASE}webservice/dispatcher.php?url=$1 [QSA,L]

# Images
RewriteCond %{HTTP_HOST} ^mydomain.net$
RewriteRule ^([0-9])(-[_a-zA-Z0-9-]*)?(-[0-9] )?/. .jpg$ %{ENV:REWRITEBASE}img/p/$1/$1$2$3.jpg [L]
RewriteCond %{HTTP_HOST} ^mydomain.net$
RewriteRule ^([0-9])([0-9])(-[_a-zA-Z0-9-]*)?(-[0-9] )?/. .jpg$ %{ENV:REWRITEBASE}img/p/$1/$2/$1$2$3$4.jpg [L]
RewriteCond %{HTTP_HOST} ^mydomain.net$
RewriteRule ^([0-9])([0-9])([0-9])(-[_a-zA-Z0-9-]*)?(-[0-9] )?/. .jpg$ %{ENV:REWRITEBASE}img/p/$1/$2/$3/$1$2$3$4$5.jpg [L]
RewriteCond %{HTTP_HOST} ^mydomain.net$
RewriteRule ^([0-9])([0-9])([0-9])([0-9])(-[_a-zA-Z0-9-]*)?(-[0-9] )?/. .jpg$ %{ENV:REWRITEBASE}img/p/$1/$2/$3/$4/$1$2$3$4$5$6.jpg [L]
RewriteCond %{HTTP_HOST} ^mydomain.net$
RewriteRule ^([0-9])([0-9])([0-9])([0-9])([0-9])(-[_a-zA-Z0-9-]*)?(-[0-9] )?/. .jpg$ %{ENV:REWRITEBASE}img/p/$1/$2/$3/$4/$5/$1$2$3$4$5$6$7.jpg [L]
RewriteCond %{HTTP_HOST} ^mydomain.net$
RewriteRule ^([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])(-[_a-zA-Z0-9-]*)?(-[0-9] )?/. .jpg$ %{ENV:REWRITEBASE}img/p/$1/$2/$3/$4/$5/$6/$1$2$3$4$5$6$7$8.jpg [L]
RewriteCond %{HTTP_HOST} ^mydomain.net$
RewriteRule ^([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])(-[_a-zA-Z0-9-]*)?(-[0-9] )?/. .jpg$ %{ENV:REWRITEBASE}img/p/$1/$2/$3/$4/$5/$6/$7/$1$2$3$4$5$6$7$8$9.jpg [L]
RewriteCond %{HTTP_HOST} ^mydomain.net$
RewriteRule ^([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])(-[_a-zA-Z0-9-]*)?(-[0-9] )?/. .jpg$ %{ENV:REWRITEBASE}img/p/$1/$2/$3/$4/$5/$6/$7/$8/$1$2$3$4$5$6$7$8$9$10.jpg [L]
RewriteCond %{HTTP_HOST} ^mydomain.net$
RewriteRule ^c/([0-9] )(-[.*_a-zA-Z0-9-]*)(-[0-9] )?/. .jpg$ %{ENV:REWRITEBASE}img/c/$1$2$3.jpg [L]
RewriteCond %{HTTP_HOST} ^mydomain.net$
RewriteRule ^c/([a-zA-Z_-] )(-[0-9] )?/. .jpg$ %{ENV:REWRITEBASE}img/c/$1$2.jpg [L]
# AlphaImageLoader for IE and fancybox
RewriteRule ^images_ie/?([^/] ).(jpe?g|png|gif)$ js/jquery/plugins/fancybox/images/$1.$2 [L]

# Dispatcher
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ %{ENV:REWRITEBASE}index.php [NC,L]
</IfModule>

AddType application/vnd.ms-fontobject .eot
AddType font/ttf .ttf
AddType font/otf .otf
AddType application/font-woff .woff
AddType font/woff2 .woff2
<IfModule mod_headers.c>
    <FilesMatch ".(ttf|ttc|otf|eot|woff|woff2|svg)$">
        Header set Access-Control-Allow-Origin "*"
    </FilesMatch>

    <FilesMatch ".pdf$">
      Header set Content-Disposition "Attachment"
      Header set X-Content-Type-Options "nosniff"
    </FilesMatch>
</IfModule>

<Files composer.lock>
    # Apache 2.2
    <IfModule !mod_authz_core.c>
        Order deny,allow
        Deny from all
    </IfModule>

    # Apache 2.4
    <IfModule mod_authz_core.c>
        Require all denied
    </IfModule>
</Files>
<IfModule mod_expires.c>
    ExpiresActive On
    ExpiresByType image/gif "access plus 1 month"
    ExpiresByType image/jpeg "access plus 1 month"
    ExpiresByType image/png "access plus 1 month"
    ExpiresByType text/css "access plus 1 week"
    ExpiresByType text/javascript "access plus 1 week"
    ExpiresByType application/javascript "access plus 1 week"
    ExpiresByType application/x-javascript "access plus 1 week"
    ExpiresByType image/x-icon "access plus 1 year"
    ExpiresByType image/svg xml "access plus 1 year"
    ExpiresByType image/vnd.microsoft.icon "access plus 1 year"
    ExpiresByType application/font-woff "access plus 1 year"
    ExpiresByType application/x-font-woff "access plus 1 year"
    ExpiresByType font/woff2 "access plus 1 year"
    ExpiresByType application/vnd.ms-fontobject "access plus 1 year"
    ExpiresByType font/opentype "access plus 1 year"
    ExpiresByType font/ttf "access plus 1 year"
    ExpiresByType font/otf "access plus 1 year"
    ExpiresByType application/x-font-ttf "access plus 1 year"
    ExpiresByType application/x-font-otf "access plus 1 year"
</IfModule>

<IfModule mod_headers.c>
    Header unset Etag
</IfModule>
FileETag none
<IfModule mod_deflate.c>
    <IfModule mod_filter.c>
        AddOutputFilterByType DEFLATE text/html text/css text/javascript application/javascript application/x-javascript font/ttf application/x-font-ttf font/otf application/x-font-otf font/opentype image/svg xml
    </IfModule>
</IfModule>

#If rewrite mod isn't enabled
ErrorDocument 404 /shop/index.php?controller=404

# ~~end~~ Do not remove this comment, Prestashop will keep automatically the code outside this comment when .htaccess will be generated again  

Комментарии:

1. как насчет того, чтобы добавить сюда код .htaccess?

2. Я второй Popeye здесь, как только вы добавите свой файл кода .htaccess в свой вопрос, добавлю свой ответ, который я уже написал.

3. Redirect Директива соответствует только компоненту пути URL-адреса, в документации это четко объясняется. Если вы хотите что-то делать на основе содержимого строки запроса, тогда вам нужно использовать mod_rewrite , a RewriteCond может проверить соответствующую переменную сервера, а затем следующий RewriteRule может выполнить перенаправление.

4. Спасибо, я добавил HTACCESS изнутри /shop/.htaccess Можете ли вы предложить исправления?

5. @Markturis Вам следует обратиться к приведенному ниже ответу о том, что у вас, похоже, уже есть «используемая часть» в вашем .htaccess файле. Но по какой-то причине вы удалили /shop из него все важные элементы (поэтому он, конечно, не будет работать так, как написано)?

Ответ №1:

Не могли бы вы попробовать следующее, написанное в соответствии с показанными примерами.

 RewriteEngine ON
RewriteCond %{REQUEST_URI} ^/shop/?$ [NC]
RewriteCond %{QUERY_STRING} ^mylogout= [NC]
RewriteRule ^(.*)$ /shop/my-account/?%{QUERY_STRING} [R=301,NE,NC,L]