.htaccess 500 erro interno do servidor, sinalizador incorreto

2

Gostaria de adicionar o seguinte ao meu arquivo .htaccess do Magento:

RewriteBase /
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9} /index.php HTTP/
RewriteRule ^index.php$ http://www.mystore.com/ [R=301,L]

No entanto, é um erro de 500 servidores internos.

Um exame de registro resulta em:

RewriteCond: bad flag delimiters

Existe uma maneira de ter isso reescrito ou para solucionar problemas de alguma forma?

EDIT: Meu arquivo htaccess atual:

    Options -Indexes

    ############################################
    ## uncomment these lines for CGI mode
    ## make sure to specify the correct cgi php binary file name
    ## it might be /cgi-bin/php-cgi

    #    Action php5-cgi /cgi-bin/php5-cgi
    #    AddHandler php5-cgi .php

    ############################################
    ## default index file

        DirectoryIndex index.php

    <IfModule mod_php5.c>

    ############################################
    ## disable magic quotes for php request vars

        php_flag magic_quotes_gpc off

    ############################################
    ## disable automatic session start
    ## before autoload was initialized

        php_flag session.auto_start off

    ############################################
    ## enable resulting html compression

        php_flag zlib.output_compression on

    ###########################################
    # disable user agent verification to not break multiple image upload

        php_flag suhosin.session.cryptua off

    ###########################################
    # turn off compatibility with PHP4 when dealing with objects

        php_flag zend.ze1_compatibility_mode Off

    </IfModule>

    <IfModule mod_security.c>
    ###########################################
    # disable POST processing to not break multiple image upload

        SecFilterEngine Off
        SecFilterScanPOST Off
    </IfModule>

    <IfModule mod_deflate.c>

    ############################################
    ## enable apache served files compression
    ## http://developer.yahoo.com/performance/rules.html#gzip

        # Insert filter on all content
        SetOutputFilter DEFLATE
        # Insert filter on selected content types only
        AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css text/javascript application/x-javascript

        # Netscape 4.x has some problems...
        BrowserMatch ^Mozilla/4 gzip-only-text/html

        # Netscape 4.06-4.08 have some more problems
        BrowserMatch ^Mozilla/4\.0[678] no-gzip

        # MSIE masquerades as Netscape, but it is fine
        BrowserMatch \bMSIE !no-gzip !gzip-only-text/html

        # Don't compress images
        SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ no-gzip dont-vary

        # Make sure proxies don't deliver the wrong content
        Header append Vary User-Agent env=!dont-vary

    </IfModule>


    <IfModule mod_ssl.c>

    ############################################
    ## make HTTPS env vars available for CGI mode

        SSLOptions StdEnvVars

    </IfModule>

    <IfModule mod_rewrite.c>

    ############################################
    ## enable rewrites

        Options +FollowSymLinks
        RewriteEngine on

    ############################################
    ## you can put here your magento root folder
    ## path relative to web root

        RewriteBase /

    ############################################
    ## workaround for HTTP authorization
    ## in CGI environment

        RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

    ############################################
    ## always send 404 on missing files in these folders

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

    ############################################
    ## never rewrite for existing files, directories and links

        RewriteCond %{REQUEST_FILENAME} !-f
        RewriteCond %{REQUEST_FILENAME} !-d
        RewriteCond %{REQUEST_FILENAME} !-l

    ############################################
    ## rewrite everything else to index.php

        RewriteRule .* index.php [L]

    </IfModule>


    ############################################
    ## Prevent character encoding issues from server overrides
    ## If you still have problems, use the second line instead

        AddDefaultCharset Off
        #AddDefaultCharset UTF-8

    <IfModule mod_expires.c>

    ############################################
    ## Add default Expires header
    ## http://developer.yahoo.com/performance/rules.html#expires

        ExpiresActive On
        ExpiresByType text/css "access plus 30 days"
        ExpiresByType text/javascript "access plus 7 days"
        ExpiresByType application/x-javascript "access plus 7 days"
        ExpiresByType application/javascript "access plus 7 days"
        ExpiresByType image/x-icon "access plus 7 days"
        ExpiresByType image/png "access plus 3 months"
        ExpiresByType image/gif "access plus 3 months"
        ExpiresByType image/jpeg "access plus 3 months"
        ExpiresByType image/jpg "access plus 3 months"
        ExpiresByType application/x-shockwave-flash "access plus 3 months"

    </IfModule>

    ############################################
    ## By default allow all access

        Order allow,deny
        Allow from all

    ###########################################
    ## Deny access to release notes to prevent disclosure of the installed Magento version

        <Files RELEASE_NOTES.txt>
            order allow,deny
            deny from all
        </Files>

    ############################################
    ## If running in cluster environment, uncomment this
    ## http://developer.yahoo.com/performance/rules.html#etags

        #FileETag none
    
por TheDave 06.09.2012 / 05:54

1 resposta

2

O problema está aqui:

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9} /index.php HTTP/

A separação de espaço significa que apenas ^[A-Z]{3,9} é considerado parte da regex (e o restante é tratado como uma flag - o que não funciona bem, como você encontrou).

Você precisaria envolvê-lo entre aspas:

RewriteCond %{THE_REQUEST} "^[A-Z]{3,9} /index\.php HTTP/"

Ou melhor ainda, basta usar um equivalente com uma sequência de correspondência menos meticulosa.

RewriteCond %{REQUEST_URI} ^/index\.php$
    
por 06.09.2012 / 06:14