.htaccess error at sinvis.org

Hi,

I attempted to update from my 1 click hosting install of 1.8.x to the 1.9.7 I recently downloaded as soon as it came available yesterday and now getting an error when trying to log into site "update your .htaccess file to remove the page handler."

I followed the instructions as close as I know how to what is written (wish it was a step by step guide as I had to hop around the page and some of the folders it asked to delete did not exist) by deleting all the folders except mod and elgg_data and leaving .htaccess. Then I copied all the new files over to the server for 1.9.7 and reconnected the database setup then initiated the ./upgrade.php in the browser. Upon completion of database connection I got an error message that the database contained tables. I do not know why this is an error message since I am doing an upgrade. I deleted part of the URL as directed and now the .htaccess error.

  • The content of the .htaccess file of Elgg 1.9 (especially some rewrite rules) is slightly different from the .htaccess of Elgg 1.8. You can create a .htaccess file for Elgg 1.9 based on the htaccess_dist file that comes with Elgg 1.9.

    First, you should check if there are any differences between your current .htaccess file and the htaccess_dist file of Elgg 1.8 previously installed on your server. If there are any differences (e.g. a different RewriteBase used or changed values of memory_limit etc.), you will have to make the same changes in htacess_dist of Elgg 1.9. After making any changes necessary rename htaccess_dist to .htaccess and the error should be gone. You should then repeat running upgrade.php and additionally check for pending upgrades in the admin section (upgrade of comments and discussions).

  • There were only one or two things I felt comfortable changing without too much confusion, although I see there is more that needs to be changed. I posted below the old .htaccess and the new one with just a couple of merges I made. The rewrite stuff confuses me because I do not know if that's just new stuff in the new release.

    ----------------------OLD------------------------------

    old access:

    # Elgg htaccess directives

    <Files "htaccess_dist">
        order allow,deny
        deny from all
    </Files>

    # Don't allow listing directories
    Options -Indexes

    # Follow symbolic links
    Options +FollowSymLinks

    # Default handler
    DirectoryIndex index.php


    ############################
    # BROWSER CACHING

    # The expires module controls the Expires and Cache-Control headers. Elgg sets
    # these for dynamically generated files so this is just for static files.
    <IfModule mod_expires.c>
        ExpiresActive On
        ExpiresDefault "access plus 1 year"
    </IfModule>

    # Conditional requests are controlled through Last-Modified and ETag headers.
    # Elgg sets these on dynamically generated cacheable files so this is just for
    # static files. Note: Apache sends Last-Modified by default on static files so
    # I don't think we need to be sending ETag for these files.
    <FilesMatch "\.(jpg|jpeg|gif|png|mp3|flv|mov|avi|3pg|html|htm|swf|js|css|ico)$">
        FileETag MTime Size
    </FilesMatch>


    ############################
    # PHP SETTINGS
    <IfModule mod_php5.c>
        # limit the maximum memory consumed by the php script to 64 MB
        php_value memory_limit 64M
        # register_globals is deprecated as of PHP 5.3.0 - disable it for security reasons.
        php_value register_globals 0
        # post_max_size is the maximum size of ALL the data that is POST'ed to php at a time (8 MB)
        php_value post_max_size 8388608
        # upload_max_filesize is the maximum size of a single uploaded file (5 MB)
        php_value upload_max_filesize 5242880
        # on development servers, set to 1 to display errors. Set to 0 on production servers.
        php_value display_errors 0
    </IfModule>


    ############################
    # COMPRESSION

    # Turn on mod_gzip if available
    <IfModule mod_gzip.c>
        mod_gzip_on yes
        mod_gzip_dechunk yes
        mod_gzip_keep_workfiles No
        mod_gzip_minimum_file_size 1000
        mod_gzip_maximum_file_size 1000000
        mod_gzip_maximum_inmem_size 1000000
        mod_gzip_item_include mime ^text/.*
        mod_gzip_item_include mime ^application/javascript$
        mod_gzip_item_include mime ^application/x-javascript$
        # Exclude old browsers and images since IE has trouble with this
        mod_gzip_item_exclude reqheader "User-Agent: .*Mozilla/4\..*\["
        mod_gzip_item_exclude mime ^image/.*
    </IfModule>

    ## Apache2 deflate support if available
    ##
    ## Important note: mod_headers is required for correct functioning across proxies.
    ##
    <IfModule mod_deflate.c>
        AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css text/javascript application/javascript application/x-javascript
        BrowserMatch ^Mozilla/4 gzip-only-text/html
        BrowserMatch ^Mozilla/4\.[0678] no-gzip
        BrowserMatch \bMSIE !no-gzip

    <IfModule mod_headers.c>
        Header append Vary User-Agent env=!dont-vary
    </IfModule>

        # The following is to disable compression for actions. The reason being is that these
        # may offer direct downloads which (since the initial request comes in as text/html and headers
        # get changed in the script) get double compressed and become unusable when downloaded by IE.
        SetEnvIfNoCase Request_URI action\/* no-gzip dont-vary
        SetEnvIfNoCase Request_URI actions\/* no-gzip dont-vary

    </IfModule>


    ############################
    # REWRITE RULES

    <IfModule mod_rewrite.c>

    RewriteEngine on

    # If Elgg is in a subdirectory on your site, you might need to add a RewriteBase line
    # containing the path from your site root to elgg's root. e.g. If your site is
    # http://example.com/ and Elgg is in http://example.com//, you might need
    #
    RewriteBase /
    #
    # here, only without the # in front.
    #
    # If you're not running Elgg in a subdirectory on your site, but still getting lots
    # of 404 errors beyond the front page, you could instead try:
    #
    #RewriteBase /


    # If your users receive the message "Sorry, logging in from a different domain is not permitted"
    # you must make sure your login form is served from the same hostname as your site pages.
    # See http://docs.elgg.org/wiki/Login_token_mismatch_error for more info.
    #
    # If you must add RewriteRules to change hostname, add them directly below (above all the others)


    # In for backwards compatibility
    RewriteRule ^pg\/([A-Za-z0-9\_\-]+)$ engine/handlers/page_handler.php?handler=$1&%{QUERY_STRING} [L]
    RewriteRule ^pg\/([A-Za-z0-9\_\-]+)\/(.*)$ engine/handlers/page_handler.php?handler=$1&page=$2&%{QUERY_STRING} [L]
    RewriteRule ^tag\/(.+)\/?$ engine/handlers/page_handler.php?handler=search&page=$1 [L]


    RewriteRule ^action\/([A-Za-z0-9\_\-\/]+)$ engine/handlers/action_handler.php?action=$1&%{QUERY_STRING} [L]

    RewriteRule ^cache\/(.*)$ engine/handlers/cache_handler.php?request=$1&%{QUERY_STRING} [L]

    RewriteRule ^services\/api\/([A-Za-z0-9\_\-]+)\/(.*)$ engine/handlers/service_handler.php?handler=$1&request=$2&%{QUERY_STRING} [L]

    RewriteRule ^export\/([A-Za-z]+)\/([0-9]+)\/?$ engine/handlers/export_handler.php?view=$1&guid=$2 [L]
    RewriteRule ^export\/([A-Za-z]+)\/([0-9]+)\/([A-Za-z]+)\/([A-Za-z0-9\_]+)\/$ engine/handlers/export_handler.php?view=$1&guid=$2&type=$3&idname=$4 [L]

    RewriteRule xml-rpc.php engine/handlers/xml-rpc_handler.php [L]
    RewriteRule mt/mt-xmlrpc.cgi engine/handlers/xml-rpc_handler.php [L]


    # rule for rewrite module test during install - can be removed after installation
    RewriteRule ^rewrite.php$ install.php [L]

    # Everything else that isn't a file gets routed through the page handler
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^([A-Za-z0-9\_\-]+)$ engine/handlers/page_handler.php?handler=$1 [QSA,L]

    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^([A-Za-z0-9\_\-]+)\/(.*)$ engine/handlers/page_handler.php?handler=$1&page=$2 [QSA,L]


    </IfModule>

     

    -------------------------NEW--------------------------


    # Elgg htaccess directives

    <Files "htaccess_dist">
        order allow,deny
        deny from all
    </Files>

    # Don't allow listing directories
    Options -Indexes

    # Follow symbolic links
    Options +FollowSymLinks

    # Default handler
    DirectoryIndex index.php


    ############################
    # BROWSER CACHING

    # Make sure .ico has proper MIME type, allowing mod_expires to handle them.
    <IfModule mod_mime.c>
        AddType image/vnd.microsoft.icon .ico
    </IfModule>

    # The expires module controls the Expires and Cache-Control headers. Elgg sets
    # these for dynamically generated files so this is just for static files.
    <IfModule mod_expires.c>
        ExpiresActive On
        ExpiresDefault "access plus 1 year"
    </IfModule>

    # Conditional requests are controlled through Last-Modified and ETag headers.
    # Elgg sets these on dynamically generated cacheable files so this is just for
    # static files. Note: Apache sends Last-Modified by default on static files so
    # I don't think we need to be sending ETag for these files.
    <FilesMatch "\.(jpg|jpeg|gif|png|mp3|flv|mov|avi|3pg|html|htm|swf|js|css|ico)$">
        FileETag MTime Size
    </FilesMatch>


    ############################
    # PHP SETTINGS
    <IfModule mod_php5.c>
        # limit the maximum memory consumed by the php script to 64 MB
        php_value memory_limit 64M
        # register_globals is deprecated as of PHP 5.3.0 - disable it for security reasons.
        php_value register_globals 0
        # post_max_size is the maximum size of ALL the data that is POST'ed to php at a time (8 MB)
        php_value post_max_size 8388608
        # upload_max_filesize is the maximum size of a single uploaded file (5 MB)
        php_value upload_max_filesize 5242880
        # on development servers, set to 1 to display errors. Set to 0 on production servers.
        php_value display_errors 0
    </IfModule>


    ############################
    # COMPRESSION

    # Turn on mod_gzip if available
    <IfModule mod_gzip.c>
        mod_gzip_on yes
        mod_gzip_dechunk yes
        mod_gzip_keep_workfiles No
        mod_gzip_minimum_file_size 1000
        mod_gzip_maximum_file_size 1000000
        mod_gzip_maximum_inmem_size 1000000
        mod_gzip_item_include mime ^text/.*
        mod_gzip_item_include mime ^application/javascript$
        mod_gzip_item_include mime ^application/x-javascript$
        # Exclude old browsers and images since IE has trouble with this
        mod_gzip_item_exclude reqheader "User-Agent: .*Mozilla/4\..*\["
        mod_gzip_item_exclude mime ^image/.*
    </IfModule>

    ## Apache2 deflate support if available
    ##
    ## Important note: mod_headers is required for correct functioning across proxies.
    ##
    <IfModule mod_deflate.c>
        AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css text/javascript application/javascript application/x-javascript image/svg+xml
        BrowserMatch ^Mozilla/4 gzip-only-text/html
        BrowserMatch ^Mozilla/4\.[0678] no-gzip
        BrowserMatch \bMSIE !no-gzip

    <IfModule mod_headers.c>
        Header append Vary User-Agent env=!dont-vary
    </IfModule>

        # The following is to disable compression for actions. The reason being is that these
        # may offer direct downloads which (since the initial request comes in as text/html and headers
        # get changed in the script) get double compressed and become unusable when downloaded by IE.
        SetEnvIfNoCase Request_URI action\/* no-gzip dont-vary
        SetEnvIfNoCase Request_URI actions\/* no-gzip dont-vary

    </IfModule>


    ############################
    # REWRITE RULES

    <IfModule mod_rewrite.c>

    RewriteEngine on

    # If Elgg is in a subdirectory on your site, you might need to add a RewriteBase line
    # containing the path from your site root to elgg's root. e.g. If your site is
    # http://example.com/ and Elgg is in http://example.com/sites/elgg/, you might need
    #
    #RewriteBase /
    #
    # here, only without the # in front.
    #
    # If you're not running Elgg in a subdirectory on your site, but still getting lots
    # of 404 errors beyond the front page, you could instead try:
    #
    #RewriteBase /


    # If your users receive the message "Sorry, logging in from a different domain is not permitted"
    # you must make sure your login form is served from the same hostname as your site pages.
    # See http://learn.elgg.org/en/stable/appendix/faqs/general.html#login-token-mismatch for more info.
    #
    # If you must add RewriteRules to change hostname, add them directly below (above all the others)

    # hide all dot files/dirs (.git)
    RewriteRule (^\.|/\.) - [F]

    # cache handler to skip engine
    RewriteRule ^cache\/(.*)$ engine/handlers/cache_handler.php?request=$1&%{QUERY_STRING} [L]

    # deprecated export handler
    RewriteRule ^export\/([A-Za-z]+)\/([0-9]+)\/?$ engine/handlers/export_handler.php?view=$1&guid=$2 [L]
    RewriteRule ^export\/([A-Za-z]+)\/([0-9]+)\/([A-Za-z]+)\/([A-Za-z0-9\_]+)\/$ engine/handlers/export_handler.php?view=$1&guid=$2&type=$3&idname=$4 [L]

    # rule for rewrite module test during install - can be removed after installation
    RewriteRule ^rewrite.php$ install.php [L]

    # Everything else that isn't a file gets routed through Elgg
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.php?__elgg_uri=$1 [QSA,L]

    </IfModule>

  • The only difference I see in your old .htaccess compared to htaccess_dist of Elgg 1.8 is that the line

    RewriteBase /

    is not commented out.

    So, I would suggest to simply copy+rename the file htaccess_dist of Elgg 1.9 to .htaccess and then remove the comment character (#) from the line "RewriteBase /". Other changes should not be necessary - especially not merging any rewrite rules because these are different for Elgg 1.9 (and that's why a new .htaccess file is necessary in the first place).

  • Ok, it seems there is one more missing thing, when logging in I got error "can't login from another domain" once and all times after got error "Form is missing ... Token or it's fields.

     

    Thanks

  • Got it working now. I tried removing the # from both lines where I just only did one of them before.