htaccess rewrite cond для перезаписи 404 ошибок в исключенных URL

У меня проблема с моим файлом .htaccess .

У Google есть некоторые URL-адреса проиндексировано. Я не хочу (ошибка 404) в Инструментах для веб-мастеров.

Мне нужно переписать URL-адреса, содержащие - , / - или заканчивающиеся на - вот так:

  1. заменить - на -
  2. удалить - после /
  3. удалить окончание -

.. .но только если URL не содержит product_info.php .

Я пробовал с этим, но он не работает ...

RewriteCond %{REQUEST_URI} !^/product_info\.php(.*)$
RewriteRule ^(.*)--(.*)$ /$1-$2 [L,R=301]
RewriteRule ^(.*)/-(.*)$ /$1/$2 [L,R=301]
RewriteRule ^(.*)-$ /$1$2 [L,R=301]

Это в интернет-магазине Magento с активированным кешем Varnish.

Редактировать №1:

Да, они появляются в отчете об ошибке 404!

Под неработающими я имею в виду: Magento говорит: «Этот документ перемещен сюда». Если я щелкну здесь, появится «Ошибка блока ESI»

После product_info.php? Product = TestProduct - Green - XXL

может быть что-то другое. В этом случае я не хочу чтобы заменить - на - =>, я думаю, это проблема.

Редактировать №2:

Вот полный .htaccess . Я удалил комментарии, ожидая переадресации, которую я пытаюсь запустить из-за большого количества места.

DirectoryIndex index.php
<IfModule mod_php5.c>
    php_value memory_limit 6144M
    php_value max_execution_time 18000
    php_flag magic_quotes_gpc off
    php_flag session.auto_start off
    php_flag suhosin.session.cryptua off
    php_flag zend.ze1_compatibility_mode Off
</IfModule>
<IfModule mod_security.c>
    SecFilterEngine Off
    SecFilterScanPOST Off
</IfModule>
<IfModule mod_deflate.c>
</IfModule>
<IfModule mod_ssl.c>
    SSLOptions StdEnvVars
</IfModule>
<IfModule mod_rewrite.c>
    Options +FollowSymLinks
    RewriteEngine on
    RewriteCond %{REQUEST_URI} ^/rma/
    RewriteRule ^ - [L]

#RewriteCond %{REQUEST_URI} !^/product_info(.*)     
#RewriteRule ^(.*)--(.*)$ /$1-$2 [L,R=301]
#RewriteCond %{REQUEST_URI} !^/product_info(.*)     
#RewriteRule ^(.*)/-(.*)$ /$1/$2 [L,R=301]
#RewriteCond %{REQUEST_URI} !^/product_info(.*)     
#RewriteRule ^(.*)-$ /$1$2 [L,R=301]



    RewriteRule ^api/rest api.php?type=rest [QSA,L]
    RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

    RewriteCond %{REQUEST_METHOD} ^TRAC[EK]
    RewriteRule .* - [L,R=405]

    RewriteCond %{REQUEST_URI} !^/(media|skin|js)/

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-l
    RewriteRule .* index.php [L]

</IfModule>
    AddDefaultCharset Off
<IfModule mod_expires.c>
    ExpiresDefault "access plus 1 year"
</IfModule>
    Order allow,deny
    Allow from all
    <Files RELEASE_NOTES.txt>
        order allow,deny
        deny from all
    </Files>
    <Files cron.php>
        Order allow,deny
        Deny from all
    </Files>
1
задан 1 September 2016 в 05:32
1 ответ

ರಿರೈಟ್‌ಕಾಂಡ್ ನಿರ್ದೇಶನವು ಅದನ್ನು ಅನುಸರಿಸುವ ಏಕ ರಿರೈಟ್‌ರೂಲ್ ಗೆ ಮಾತ್ರ ಅನ್ವಯಿಸುತ್ತದೆ. ಆದ್ದರಿಂದ, ಪ್ರತಿ ನಿಯಮಕ್ಕೂ ನೀವು ಈ ಸ್ಥಿತಿಯನ್ನು ಪುನರಾವರ್ತಿಸಬೇಕಾಗಿದೆ. ಉದಾಹರಣೆಗೆ:

Options +FollowSymLinks
RewriteEngine On

RewriteCond %{REQUEST_URI} !^/product_info\.php
RewriteRule (.*)--(.*) /$1-$2 [L,R=301]

RewriteCond %{REQUEST_URI} !^/product_info\.php
RewriteRule (.*)/-(.*) /$1/$2 [L,R=301]

RewriteCond %{REQUEST_URI} !^/product_info\.php
RewriteRule (.*)-$ /$1 [L,R=301]

ಪರ್ಯಾಯವಾಗಿ, /product_info.php ಫೈಲ್‌ನ ಯಾವುದೇ ಪುನಃ ಬರೆಯುವುದನ್ನು ತಪ್ಪಿಸಲು ನೀವು ನಿಯಮಗಳ ಪ್ರಾರಂಭದಲ್ಲಿ ಒಂದು ವಿನಾಯಿತಿಯನ್ನು ಸೇರಿಸಬಹುದು. ಆದರೆ ಇದು ನಿಮ್ಮ ಉಳಿದ .htaccess ಫೈಲ್‌ನ ಮೇಲೆ ಅವಲಂಬಿತವಾಗಿರುತ್ತದೆ, ಏಕೆಂದರೆ ಅದು /product-info.php ಅನ್ನು ಪುನಃ ಬರೆಯುವುದರಿಂದ ಹೊರಗಿಡುತ್ತದೆ. ಉದಾಹರಣೆಗೆ:

RewriteRule ^product_info\.php$ - [L]

ನಾನು ಕಾಂಡ್‌ಪ್ಯಾಟರ್ನ್ ನಲ್ಲಿ ಹಿಂದುಳಿದ (. *) $ ಅನ್ನು ಸಹ ತೆಗೆದುಹಾಕಿದ್ದೇನೆ - ಅದು ಈ ಉದಾಹರಣೆಯಲ್ಲಿ ಅತಿಯಾದದ್ದು. ನೀವು ಕಳ್ಳಿ-ಎಲ್ಲ ಅನ್ನು ಹೊಂದಿರುವಾಗ ಲಂಗರುಗಳಂತೆ. * ಮಾದರಿ (ಪೂರ್ವನಿಯೋಜಿತವಾಗಿ ದುರಾಸೆ).

ಪರೀಕ್ಷಿಸುವ ಮೊದಲು ನಿಮ್ಮ ಎಲ್ಲಾ ಸಂಗ್ರಹಗಳು ಸ್ಪಷ್ಟವಾಗಿವೆ ಎಂದು ಖಚಿತಪಡಿಸಿಕೊಳ್ಳಿ. 302 (ತಾತ್ಕಾಲಿಕ) ನೊಂದಿಗೆ ಪರೀಕ್ಷಿಸುವುದು ಸುಲಭವಾಗಿದೆಮರುನಿರ್ದೇಶನ, ಏಕೆಂದರೆ ಇವುಗಳು ಸಂಗ್ರಹವಾಗಿಲ್ಲ (ಅಥವಾ ಮಾಡಬಾರದು).

0
ответ дан 4 December 2019 в 05:56

Теги

Похожие вопросы