Yetangitu / owncloud-apps

Applications for Nextcloud and Owncloud personal cloud server
GNU Affero General Public License v3.0
85 stars 41 forks source link

Bookmarks don't save #34

Closed catalyst1987 closed 7 years ago

catalyst1987 commented 7 years ago

Tried adding a bookmark to an epub while in the reader. Closed the epub and then reopened it, but the bookmark was no longer there.

This is happening in Nextcloud. Haven't tried in owncloud.

Yetangitu commented 7 years ago

Saving bookmarks (etc.) is not implemented in current releases.

It is implemented in the new release I'm trying to get ready now. It also supports more formats (CBR/CBZ, more to come).

One of these days now... one of these days. Stay tuned.

Yetangitu commented 7 years ago

This problem was fixed in v1.0.0

4oo4 commented 7 years ago

I'm still having this issue with v1.0.1, not sure if it's related to issue #35 and Nextcloud not being on it's own subdomain? I noticed that when I went to save a bookmark and grabbed the link for it the path looked weird: https://example.com/nextcloud/apps/files_reader/#epubcfi(/6/12[adcard]!4/2[ad]/2/1:0) (I'm thinking that needs to be /nextcloud/index.php/apps...?)

I think that's then causing a 403 error when it tries to save it: "GET /nextcloud/apps/files_reader/ HTTP/2.0" 403

Also, if I understand right, the bookmarks get saved to the oc_reader_bookmarks table in the database?

EDIT: Getting these errors in Nextcloud logs:

Undefined index: title at /var/www/html/nextcloud/apps/files_reader/templates/epubreader.php#37
Undefined variable: dllink at /var/www/html/nextcloud/apps/files_reader/templates/epubreader.php#15
Use of undefined constant fileId - assumed 'fileId' at /var/www/html/nextcloud/apps/files_reader/lib/Controller/PageController.php#140
Use of undefined constant fileType - assumed 'fileType' at /var/www/html/nextcloud/apps/files_reader/lib/Controller/PageController.php#139
Use of undefined constant fileName - assumed 'fileName' at /var/www/html/nextcloud/apps/files_reader/lib/Controller/PageController.php#138
Yetangitu commented 7 years ago

Bookmarks are a type of annotation, they're saved to _PREFIXreaderbookmarks with the bookmarked location stored in the value field. Other than the cursor (current reading location) they also contain the location in the content field, under the anchor tag.

Yes, they look that way, that path is created by combining the output from the OC/NC urlGenerator with app-specific data. In other words, it is OC/NC itself which provides the https://example.com/nextcloud/apps/files_reader/ part of the url, and you're right in that it does not contain the index.php fragment. Either way, those bookmarks are - at least for now - meant for internal consumption as accessing a book in any other way than through the files app leads to an Access Denied message due to the absence of file information in the link - all you get is a location in the book, not the book itself. It would be possible to add a search fragment to the request to get a bookmark to resolve and load the file, maybe I should add an 'external bookmark' link as well.

That the path looks 'weird' is not that strange, those are CFI links which only make sense within the context of EPUB documents. EPUB, being reflowable to whatever page size you want, does not have a concept of 'fixed' page numbers like PDF and other fixed-format document formats do. It is possible to approximate something like a page number but that is no more than that, an approximation. CFI is accurate to a specific character in a document and as such usable to anchor annotations as well as more generic bookmarks. CBR/CBZ and PDF (coming up in the next version) do use 'normal' page numbers.

Yetangitu commented 7 years ago

But... errrr what is it exactly which doesn't work for you? Can you bookmark within a publication? Can you read the publication? Do annotations work? Does it remember the reading position?

Yetangitu commented 7 years ago

OK, you just edited you post while I had my answer open already. Which version of Nextcloud do you use? Which version of PHP?

4oo4 commented 7 years ago

@Yetangitu Thanks for the info! I'm running Nextcloud 11.0.2, PHP version 7.0.15. The issue is that annotations, bookmarks, and reading positions aren't saved when closing/reopening a book through the Files app, and I get those errors in the NC logs, as well as these 404s in the console for these requests: https://example.com/nextcloud/apps/files_reader/bookmark/cursor https://example.com/nextcloud/apps/files_reader/preference/default

Yetangitu commented 7 years ago

What database do you use? Which web server?

Yetangitu commented 7 years ago

OK, those messages about undefined constant fileId etc. are easily solvable, they're due to the use of barewords (missing quotes, PHP is not javascript...) but they should not cause these problems. The bit about a missing title and dllink are remnants of a previous version and will be fixed in the next release. None of these issues are the cause of your problems, though...

Can you open a book, open the source for the page and paste the contents of the app iframe <head> tag?

4oo4 commented 7 years ago

Database is MySQL 5.7.17. I should also add that I'm doing an nginx reverse proxy to Apache for my webserver.

I found that adding this to my nginx config fixes the issue:

rewrite ^/nextcloud/apps/files_reader/preference/default /nextcloud/index.php/apps/files_reader/preferences/default;
rewrite ^/nextcloud/apps/files_reader/bookmark/cursor /nextcloud/index.php/apps/files_reader/bookmark/cursor/$args;
rewrite ^/nextcloud/apps/files_reader/bookmark /nextcloud/index.php/apps/files_reader/bookmark;
rewrite ^/nextcloud/apps/files_reader/bookmark/$args /nextcloud/index.php/apps/files_reader/bookmark/$args;

Here's what the <head> tag looks like when I remove that config:

<head class="session" data-nonce='xxxxxxxxxxxxxxxxxxxxxxxxxxx=' data-downloadlink='/nextcloud/remote.php/webdav/Books/Books%20-%20Nonfiction/No%20Place%20to%20Hide/No%20Place%20to%20Hide_%20Edward%20Snowden%2C%20the%20NSA%20and%20the%20Surveillance%20State%20-%20Glenn%20Greenwald.epub' data-fileid='141891' data-filetype='epub' data-filename='No%20Place%20to%20Hide_%20Edward%20Snowden%2C%20the%20NSA%20and%20the%20Surveillance%20State%20-%20Glenn%20Greenwald' data-version='1.0.1.0071' data-basepath='/nextcloud/apps/files_reader/' data-scope='epubreader' data-cursor='null' data-defaults='[]' data-preferences='[]' data-metadata='{&quot;id&quot;:&quot;141891&quot;,&quot;updated&quot;:&quot;2017-03-19 17:37:23&quot;,&quot;date&quot;:&quot;2014-05-13T04:00:00+00:00&quot;,&quot;author&quot;:&quot;{\&quot;Greenwald, Glenn\&quot;:\&quot;Glenn Greenwald\&quot;}&quot;,&quot;title&quot;:&quot;No Place to Hide: Edward Snowden, the NSA and the Surveillance State&quot;,&quot;language&quot;:&quot;en&quot;,&quot;publisher&quot;:&quot;Hamish Hamilton&quot;,&quot;isbn&quot;:&quot;9780241146699&quot;,&quot;copyright&quot;:&quot;All rights reserved&quot;,&quot;description&quot;:&quot;Glenn Greenwald&#039;s No Place to Hide is the story of one of the greatest national security leaks in US history.  In June 2013, reporter and political commentator Glenn Greenwald published a series of reports in the Guardian which rocked the world.  The reports revealed shocking truths about the extent to which the National Security Agency had been gathering information about US citizens and intercepting communication worldwide, and were based on documents leaked by former National Security Agency employee Edward Snowden to Greenwald.  Including new revelations from documents entrusted to Greenwald by Snowden, this essential book tells the story of Snowden and the NSA and examines the far-reaching consequences of the government&#039;s surveillance program, both in the US and abroad.  &#039;The first thing I do when I turn on the computer in the morning is go to Glenn Greenwald&#039;s blog. He is truly one of our greatest writers right now&#039; Michael Moore  &#039;The most important voice to have entered the political discourse in years&#039; Bill Moyers  Glenn Greenwald is the author of several US bestsellers, including How Would A Patriot Act?, and A Tragic Legacy. Acclaimed as one of the twenty-five most influential political commentators by The Atlantic, Greenwald is a former constitutional law and civil rights attorney. He has been a columnist for the Guardian since August 2012 and his work has appeared in numerous newspapers and political news magazines, including The New York Times and the Los Angeles Times.&quot;,&quot;subjects&quot;:&quot;[\&quot;Politics\&quot;,\&quot;History\&quot;]&quot;,&quot;cover&quot;:null,&quot;rescan&quot;:&quot;2017-03-26 17:37:24&quot;}' data-annotations='[{&quot;name&quot;:&quot;epubcfi610author42aut210&quot;,&quot;type&quot;:&quot;bookmark&quot;,&quot;value&quot;:&quot;epubcfi(\/6\/10[author]!4\/2[aut]\/2\/1:0)&quot;,&quot;content&quot;:{&quot;id&quot;:&quot;epubcfi610author42aut210&quot;,&quot;type&quot;:&quot;bookmark&quot;,&quot;date&quot;:1489953761057,&quot;edited&quot;:1489953761057,&quot;anchor&quot;:&quot;epubcfi(\/6\/10[author]!4\/2[aut]\/2\/1:0)&quot;,&quot;body&quot;:&quot;ABOUT THE AUTHOR&quot;},&quot;lastModified&quot;:&quot;1489953761090619&quot;},{&quot;name&quot;:&quot;785159a6-8987-4711-c6d1-a4a0d3a29819&quot;,&quot;type&quot;:&quot;annotation&quot;,&quot;value&quot;:&quot;epubcfi(\/6\/10[author]!4\/8\/5:1)&quot;,&quot;content&quot;:{&quot;id&quot;:&quot;785159a6-8987-4711-c6d1-a4a0d3a29819&quot;,&quot;type&quot;:&quot;annotation&quot;,&quot;date&quot;:1489953796702,&quot;edited&quot;:1489953796702,&quot;anchor&quot;:&quot;epubcfi(\/6\/10[author]!4\/8\/5:1)&quot;,&quot;body&quot;:&quot;sdfsf&quot;},&quot;lastModified&quot;:&quot;1489953796737588&quot;}]'>
        <meta charset="utf-8">
        <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
        <meta name="apple-mobile-web-app-capable" content="yes">
        <base href="/nextcloud/apps/files_reader/">
        <title>
                    </title>
        <link rel="shortcut icon" href="img/book.png">
        <link rel="stylesheet" href="/nextcloud/apps/files_reader/vendor/icomoon/style.css?v=1.0.1.0071">
        <link rel="stylesheet" href="/nextcloud/apps/files_reader/vendor/epubjs/css/main.css?v=1.0.1.0071">
        <link rel="stylesheet" href="/nextcloud/apps/files_reader/vendor/epubjs/css/sidebar.css?v=1.0.1.0071">
        <link rel="stylesheet" href="/nextcloud/apps/files_reader/vendor/epubjs/css/popup.css?v=1.0.1.0071">
        <script type="text/javascript" nonce="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" src="/nextcloud/apps/files_reader/js/lib/typedarray.min.js?v=1.0.1.0071"> </script>
        <script type="text/javascript" nonce="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" src="/nextcloud/apps/files_reader/js/lib/Blob.js?v=1.0.1.0071"> </script>
        <script type="text/javascript" nonce="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" src="/nextcloud/apps/files_reader/js/lib/wgxpath.install.js?v=1.0.1.0071"> </script>
        <script type="text/javascript" nonce="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" src="/nextcloud/apps/files_reader/vendor/epubjs/libs/jquery.min.js?v=1.0.1.0071"> </script>
        <script type="text/javascript" nonce="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" src="/nextcloud/apps/files_reader/vendor/bartaz/jquery.highlight.js?v=1.0.1.0071"> </script>
        <script type="text/javascript" nonce="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" src="/nextcloud/apps/files_reader/vendor/jquery/put-delete.js?v=1.0.1.0071"> </script>
        <script type="text/javascript" nonce="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" src="/nextcloud/apps/files_reader/vendor/sindresorhus/screenfull.js?v=1.0.1.0071"> </script>
        <script type="text/javascript" nonce="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" src="/nextcloud/apps/files_reader/vendor/epubjs/libs/zip.min.js?v=1.0.1.0071"> </script>
        <script type="text/javascript" nonce="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" src="/nextcloud/apps/files_reader/vendor/epubjs/epub.min.js?v=1.0.1.0071"> </script>
        <script type="text/javascript" nonce="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" src="/nextcloud/apps/files_reader/vendor/epubjs/hooks.min.js?v=1.0.1.0071"> </script>
        <script type="text/javascript" nonce="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" src="/nextcloud/apps/files_reader/vendor/epubjs/hooks/extensions/highlight.js?v=1.0.1.0071"> </script>
        <script type="text/javascript" nonce="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" src="/nextcloud/apps/files_reader/vendor/epubjs/reader.min.js?v=1.0.1.0071"> </script>

        <script type="text/javascript" nonce="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" src="/nextcloud/apps/files_reader/js/ready.js?v=1.0.1.0071"> </script>
    </head>
Yetangitu commented 7 years ago

I means the iframe <head> tag, the one with class="session". This contains all data- parameters used by Reader.

OK, the reverse proxy might change things compared to a direct connection.

Here is an example <head> tag:

<head class="session" data-nonce='a3JlS004dmVtQXpqL2JZZUNRRVJqeDBuWkFkd3hkeHV0a2NyVmVqVkwyYz06NThmb0FJQ1Q2bVdscEk1bmEyaHkvVzVrQUVVRzlMRlcwd3BTWnFPeUhRMD0=' data-downloadlink='/remote.php/webdav/Library/fiction/NL/M/Mulisch_Harry/Mulisch%2C%20Harry%20-%20De%20ontdekking%20van%20de%20hemel.epub' data-fileid='17362418' data-filetype='epub' data-filename='Mulisch%2C%20Harry%20-%20De%20ontdekking%20van%20de%20hemel' data-version='1.0.1.0071' data-basepath='/apps/files_reader/' data-scope='epubreader' data-cursor='{&quot;name&quot;:&quot;__CURSOR__&quot;,&quot;type&quot;:&quot;bookmark&quot;,&quot;value&quot;:&quot;epubcfi(\/3\/2[x9789023443988-a]!4\/2[x9789023443988-a]\/4\/2\/2\/1:0)&quot;,&quot;content&quot;:null,&quot;lastModified&quot;:1489956052753799}' data-defaults='[{&quot;name&quot;:&quot;customStyles&quot;,&quot;value&quot;:{&quot;dayMode&quot;:{&quot;name&quot;:&quot;dayMode&quot;,&quot;selector&quot;:&quot;*&quot;,&quot;rules&quot;:{&quot;color&quot;:&quot;#0a0a0a&quot;,&quot;background&quot;:&quot;#f0f0f0&quot;},&quot;extra&quot;:null},&quot;nightMode&quot;:{&quot;name&quot;:&quot;nightMode&quot;,&quot;selector&quot;:&quot;*&quot;,&quot;rules&quot;:{&quot;color&quot;:&quot;#454545&quot;,&quot;background&quot;:&quot;#000000&quot;},&quot;extra&quot;:null},&quot;fontFamily&quot;:{&quot;name&quot;:&quot;fontFamily&quot;,&quot;selector&quot;:&quot;*&quot;,&quot;rules&quot;:{&quot;font-family&quot;:&quot;verdana, trebuchet, droid sans serif, sans, sans-serif&quot;},&quot;extra&quot;:null},&quot;fontSize&quot;:{&quot;name&quot;:&quot;fontSize&quot;,&quot;selector&quot;:&quot;*&quot;,&quot;rules&quot;:{&quot;font-size&quot;:&quot;100%&quot;},&quot;extra&quot;:null},&quot;fontWeight&quot;:{&quot;name&quot;:&quot;fontWeight&quot;,&quot;selector&quot;:&quot;*&quot;,&quot;rules&quot;:{&quot;font-weight&quot;:&quot;100&quot;},&quot;extra&quot;:null},&quot;pageWidth&quot;:{&quot;name&quot;:&quot;pageWidth&quot;,&quot;selector&quot;:&quot;#viewer&quot;,&quot;rules&quot;:{&quot;max-width&quot;:&quot;72em&quot;},&quot;extra&quot;:null},&quot;maximizePage&quot;:{&quot;name&quot;:&quot;maximizePage&quot;,&quot;selector&quot;:&quot;#viewer&quot;,&quot;rules&quot;:{&quot;margin&quot;:&quot;auto&quot;,&quot;width&quot;:&quot;100%&quot;,&quot;height&quot;:&quot;95%&quot;,&quot;top&quot;:&quot;5%&quot;},&quot;extra&quot;:null},&quot;appleBugs&quot;:{&quot;name&quot;:&quot;appleBugs&quot;,&quot;selector&quot;:&quot;document, html, body, p, span, div&quot;,&quot;rules&quot;:{&quot;cursor&quot;:&quot;pointer&quot;},&quot;extra&quot;:null}}}]' data-preferences='[]' data-metadata='[]' data-annotations='[{&quot;name&quot;:&quot;__CURSOR__&quot;,&quot;type&quot;:&quot;bookmark&quot;,&quot;value&quot;:&quot;epubcfi(\/3\/2[x9789023443988-a]!4\/2[x9789023443988-a]\/4\/2\/2\/1:0)&quot;,&quot;content&quot;:null,&quot;lastModified&quot;:1489956052753799}]'>

Yetangitu commented 7 years ago

BTW, you do not need to XXXX-out nonces, they are different for every request and don't contain any secret information.

4oo4 commented 7 years ago

Lol, thanks for the tip, I thought that's how nonces worked but just wanted to make sure I didn't paste anything stupid :sweat_smile:

I think I grabbed the tag for the Files app before, would this be it instead? (I clicked within the book and did view frame source, the URL for it was: /nextcloud/apps/files_reader/#epubcfi(/6/2[html-cover-page]!4/1:0)

<html class="ng-csp" data-placeholder-focus="false" lang="en" >
    <head data-requesttoken="">
        <meta charset="utf-8">
        <title>
        Nextcloud       </title>
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="referrer" content="never">
        <meta name="viewport" content="width=device-width, minimum-scale=1.0, maximum-scale=1.0">
        <meta name="apple-itunes-app" content="app-id=1125420102">
        <meta name="theme-color" content="#0082c9">
        <link rel="icon" href="/nextcloud/core/img/favicon.ico">
        <link rel="apple-touch-icon-precomposed" href="/nextcloud/core/img/favicon-touch.png">
        <link rel="mask-icon" sizes="any" href="/nextcloud/core/img/favicon-mask.svg" color="#1d2d44">
                    <link rel="stylesheet" href="/nextcloud/core/vendor/select2/select2.css?v=acfa2c95fc538cb1f59e987bcc8c81ee">
                    <link rel="stylesheet" href="/nextcloud/core/css/styles.css?v=acfa2c95fc538cb1f59e987bcc8c81ee">
                    <link rel="stylesheet" href="/nextcloud/core/css/header.css?v=acfa2c95fc538cb1f59e987bcc8c81ee">
                    <link rel="stylesheet" href="/nextcloud/core/css/icons.css?v=acfa2c95fc538cb1f59e987bcc8c81ee">
                    <link rel="stylesheet" href="/nextcloud/core/css/fonts.css?v=acfa2c95fc538cb1f59e987bcc8c81ee">
                    <link rel="stylesheet" href="/nextcloud/core/css/apps.css?v=acfa2c95fc538cb1f59e987bcc8c81ee">
                    <link rel="stylesheet" href="/nextcloud/core/css/global.css?v=acfa2c95fc538cb1f59e987bcc8c81ee">
                    <link rel="stylesheet" href="/nextcloud/core/css/fixes.css?v=acfa2c95fc538cb1f59e987bcc8c81ee">
                    <link rel="stylesheet" href="/nextcloud/core/css/multiselect.css?v=acfa2c95fc538cb1f59e987bcc8c81ee">
                    <link rel="stylesheet" href="/nextcloud/core/css/mobile.css?v=acfa2c95fc538cb1f59e987bcc8c81ee">
                    <link rel="stylesheet" href="/nextcloud/core/vendor/jquery-ui/themes/base/jquery-ui.css?v=acfa2c95fc538cb1f59e987bcc8c81ee">
                    <link rel="stylesheet" href="/nextcloud/core/css/jquery-ui-fixes.css?v=acfa2c95fc538cb1f59e987bcc8c81ee">
                    <link rel="stylesheet" href="/nextcloud/core/css/tooltip.css?v=acfa2c95fc538cb1f59e987bcc8c81ee">
                    <link rel="stylesheet" href="/nextcloud/apps/files_pdfviewer/css/style.css?v=acfa2c95fc538cb1f59e987bcc8c81ee">
                    <link rel="stylesheet" href="/nextcloud/core/css/share.css?v=acfa2c95fc538cb1f59e987bcc8c81ee">
                    <link rel="stylesheet" href="/nextcloud/apps/files_versions/css/versions.css?v=acfa2c95fc538cb1f59e987bcc8c81ee">
                    <link rel="stylesheet" href="/nextcloud/apps/files_videoplayer/css/style.css?v=acfa2c95fc538cb1f59e987bcc8c81ee">
                    <link rel="stylesheet" href="/nextcloud/apps/notifications/css/styles.css?v=acfa2c95fc538cb1f59e987bcc8c81ee">
                    <link rel="stylesheet" href="/nextcloud/core/css/inputs.css?v=acfa2c95fc538cb1f59e987bcc8c81ee">
                    <link rel="stylesheet" href="/nextcloud/core/css/jquery.ocdialog.css?v=acfa2c95fc538cb1f59e987bcc8c81ee">
                    <link rel="stylesheet" href="/nextcloud/core/css/styles.css?v=acfa2c95fc538cb1f59e987bcc8c81ee">
                    <link rel="stylesheet" href="/nextcloud/core/css/header.css?v=acfa2c95fc538cb1f59e987bcc8c81ee">
                                            <script nonce="V25CVit0UHM3NCtURjlidGg2REZJbnpMYlFPZlMyK3NhUDc3YUYzVnRQWT06RmhnQzFaMjFsdW45YjVHazdNS1RiaGo3SEVxc2ZBbmVJSStQSUcrWjhNWT0=" src="/nextcloud/core/vendor/jquery/dist/jquery.min.js?v=acfa2c95fc538cb1f59e987bcc8c81ee"></script>
                    <script nonce="V25CVit0UHM3NCtURjlidGg2REZJbnpMYlFPZlMyK3NhUDc3YUYzVnRQWT06RmhnQzFaMjFsdW45YjVHazdNS1RiaGo3SEVxc2ZBbmVJSStQSUcrWjhNWT0=" src="/nextcloud/core/vendor/jquery-migrate/jquery-migrate.min.js?v=acfa2c95fc538cb1f59e987bcc8c81ee"></script>
                    <script nonce="V25CVit0UHM3NCtURjlidGg2REZJbnpMYlFPZlMyK3NhUDc3YUYzVnRQWT06RmhnQzFaMjFsdW45YjVHazdNS1RiaGo3SEVxc2ZBbmVJSStQSUcrWjhNWT0=" src="/nextcloud/core/vendor/jquery-ui/ui/jquery-ui.custom.js?v=acfa2c95fc538cb1f59e987bcc8c81ee"></script>
                    <script nonce="V25CVit0UHM3NCtURjlidGg2REZJbnpMYlFPZlMyK3NhUDc3YUYzVnRQWT06RmhnQzFaMjFsdW45YjVHazdNS1RiaGo3SEVxc2ZBbmVJSStQSUcrWjhNWT0=" src="/nextcloud/core/vendor/underscore/underscore.js?v=acfa2c95fc538cb1f59e987bcc8c81ee"></script>
                    <script nonce="V25CVit0UHM3NCtURjlidGg2REZJbnpMYlFPZlMyK3NhUDc3YUYzVnRQWT06RmhnQzFaMjFsdW45YjVHazdNS1RiaGo3SEVxc2ZBbmVJSStQSUcrWjhNWT0=" src="/nextcloud/core/vendor/moment/min/moment-with-locales.js?v=acfa2c95fc538cb1f59e987bcc8c81ee"></script>
                    <script nonce="V25CVit0UHM3NCtURjlidGg2REZJbnpMYlFPZlMyK3NhUDc3YUYzVnRQWT06RmhnQzFaMjFsdW45YjVHazdNS1RiaGo3SEVxc2ZBbmVJSStQSUcrWjhNWT0=" src="/nextcloud/core/vendor/handlebars/handlebars.js?v=acfa2c95fc538cb1f59e987bcc8c81ee"></script>
                    <script nonce="V25CVit0UHM3NCtURjlidGg2REZJbnpMYlFPZlMyK3NhUDc3YUYzVnRQWT06RmhnQzFaMjFsdW45YjVHazdNS1RiaGo3SEVxc2ZBbmVJSStQSUcrWjhNWT0=" src="/nextcloud/core/vendor/blueimp-md5/js/md5.js?v=acfa2c95fc538cb1f59e987bcc8c81ee"></script>
                    <script nonce="V25CVit0UHM3NCtURjlidGg2REZJbnpMYlFPZlMyK3NhUDc3YUYzVnRQWT06RmhnQzFaMjFsdW45YjVHazdNS1RiaGo3SEVxc2ZBbmVJSStQSUcrWjhNWT0=" src="/nextcloud/core/vendor/bootstrap/js/tooltip.js?v=acfa2c95fc538cb1f59e987bcc8c81ee"></script>
                    <script nonce="V25CVit0UHM3NCtURjlidGg2REZJbnpMYlFPZlMyK3NhUDc3YUYzVnRQWT06RmhnQzFaMjFsdW45YjVHazdNS1RiaGo3SEVxc2ZBbmVJSStQSUcrWjhNWT0=" src="/nextcloud/core/vendor/backbone/backbone.js?v=acfa2c95fc538cb1f59e987bcc8c81ee"></script>
                    <script nonce="V25CVit0UHM3NCtURjlidGg2REZJbnpMYlFPZlMyK3NhUDc3YUYzVnRQWT06RmhnQzFaMjFsdW45YjVHazdNS1RiaGo3SEVxc2ZBbmVJSStQSUcrWjhNWT0=" src="/nextcloud/core/vendor/es6-promise/dist/es6-promise.js?v=acfa2c95fc538cb1f59e987bcc8c81ee"></script>
                    <script nonce="V25CVit0UHM3NCtURjlidGg2REZJbnpMYlFPZlMyK3NhUDc3YUYzVnRQWT06RmhnQzFaMjFsdW45YjVHazdNS1RiaGo3SEVxc2ZBbmVJSStQSUcrWjhNWT0=" src="/nextcloud/core/vendor/davclient.js/lib/client.js?v=acfa2c95fc538cb1f59e987bcc8c81ee"></script>
                    <script nonce="V25CVit0UHM3NCtURjlidGg2REZJbnpMYlFPZlMyK3NhUDc3YUYzVnRQWT06RmhnQzFaMjFsdW45YjVHazdNS1RiaGo3SEVxc2ZBbmVJSStQSUcrWjhNWT0=" src="/nextcloud/core/vendor/clipboard/dist/clipboard.js?v=acfa2c95fc538cb1f59e987bcc8c81ee"></script>
                    <script nonce="V25CVit0UHM3NCtURjlidGg2REZJbnpMYlFPZlMyK3NhUDc3YUYzVnRQWT06RmhnQzFaMjFsdW45YjVHazdNS1RiaGo3SEVxc2ZBbmVJSStQSUcrWjhNWT0=" src="/nextcloud/core/vendor/autosize/dist/autosize.js?v=acfa2c95fc538cb1f59e987bcc8c81ee"></script>
                    <script nonce="V25CVit0UHM3NCtURjlidGg2REZJbnpMYlFPZlMyK3NhUDc3YUYzVnRQWT06RmhnQzFaMjFsdW45YjVHazdNS1RiaGo3SEVxc2ZBbmVJSStQSUcrWjhNWT0=" src="/nextcloud/core/js/jquery.ocdialog.js?v=acfa2c95fc538cb1f59e987bcc8c81ee"></script>
                    <script nonce="V25CVit0UHM3NCtURjlidGg2REZJbnpMYlFPZlMyK3NhUDc3YUYzVnRQWT06RmhnQzFaMjFsdW45YjVHazdNS1RiaGo3SEVxc2ZBbmVJSStQSUcrWjhNWT0=" src="/nextcloud/core/js/oc-dialogs.js?v=acfa2c95fc538cb1f59e987bcc8c81ee"></script>
                    <script nonce="V25CVit0UHM3NCtURjlidGg2REZJbnpMYlFPZlMyK3NhUDc3YUYzVnRQWT06RmhnQzFaMjFsdW45YjVHazdNS1RiaGo3SEVxc2ZBbmVJSStQSUcrWjhNWT0=" src="/nextcloud/core/js/js.js?v=acfa2c95fc538cb1f59e987bcc8c81ee"></script>
                    <script nonce="V25CVit0UHM3NCtURjlidGg2REZJbnpMYlFPZlMyK3NhUDc3YUYzVnRQWT06RmhnQzFaMjFsdW45YjVHazdNS1RiaGo3SEVxc2ZBbmVJSStQSUcrWjhNWT0=" src="/nextcloud/core/js/l10n.js?v=acfa2c95fc538cb1f59e987bcc8c81ee"></script>
                    <script nonce="V25CVit0UHM3NCtURjlidGg2REZJbnpMYlFPZlMyK3NhUDc3YUYzVnRQWT06RmhnQzFaMjFsdW45YjVHazdNS1RiaGo3SEVxc2ZBbmVJSStQSUcrWjhNWT0=" src="/nextcloud/core/js/octemplate.js?v=acfa2c95fc538cb1f59e987bcc8c81ee"></script>
                    <script nonce="V25CVit0UHM3NCtURjlidGg2REZJbnpMYlFPZlMyK3NhUDc3YUYzVnRQWT06RmhnQzFaMjFsdW45YjVHazdNS1RiaGo3SEVxc2ZBbmVJSStQSUcrWjhNWT0=" src="/nextcloud/core/js/eventsource.js?v=acfa2c95fc538cb1f59e987bcc8c81ee"></script>
                    <script nonce="V25CVit0UHM3NCtURjlidGg2REZJbnpMYlFPZlMyK3NhUDc3YUYzVnRQWT06RmhnQzFaMjFsdW45YjVHazdNS1RiaGo3SEVxc2ZBbmVJSStQSUcrWjhNWT0=" src="/nextcloud/core/js/public/appconfig.js?v=acfa2c95fc538cb1f59e987bcc8c81ee"></script>
                    <script nonce="V25CVit0UHM3NCtURjlidGg2REZJbnpMYlFPZlMyK3NhUDc3YUYzVnRQWT06RmhnQzFaMjFsdW45YjVHazdNS1RiaGo3SEVxc2ZBbmVJSStQSUcrWjhNWT0=" src="/nextcloud/core/js/config.js?v=acfa2c95fc538cb1f59e987bcc8c81ee"></script>
                    <script nonce="V25CVit0UHM3NCtURjlidGg2REZJbnpMYlFPZlMyK3NhUDc3YUYzVnRQWT06RmhnQzFaMjFsdW45YjVHazdNS1RiaGo3SEVxc2ZBbmVJSStQSUcrWjhNWT0=" src="/nextcloud/core/search/js/search.js?v=acfa2c95fc538cb1f59e987bcc8c81ee"></script>
                    <script nonce="V25CVit0UHM3NCtURjlidGg2REZJbnpMYlFPZlMyK3NhUDc3YUYzVnRQWT06RmhnQzFaMjFsdW45YjVHazdNS1RiaGo3SEVxc2ZBbmVJSStQSUcrWjhNWT0=" src="/nextcloud/core/js/oc-requesttoken.js?v=acfa2c95fc538cb1f59e987bcc8c81ee"></script>
                    <script nonce="V25CVit0UHM3NCtURjlidGg2REZJbnpMYlFPZlMyK3NhUDc3YUYzVnRQWT06RmhnQzFaMjFsdW45YjVHazdNS1RiaGo3SEVxc2ZBbmVJSStQSUcrWjhNWT0=" src="/nextcloud/core/js/apps.js?v=acfa2c95fc538cb1f59e987bcc8c81ee"></script>
                    <script nonce="V25CVit0UHM3NCtURjlidGg2REZJbnpMYlFPZlMyK3NhUDc3YUYzVnRQWT06RmhnQzFaMjFsdW45YjVHazdNS1RiaGo3SEVxc2ZBbmVJSStQSUcrWjhNWT0=" src="/nextcloud/core/js/mimetype.js?v=acfa2c95fc538cb1f59e987bcc8c81ee"></script>
                    <script nonce="V25CVit0UHM3NCtURjlidGg2REZJbnpMYlFPZlMyK3NhUDc3YUYzVnRQWT06RmhnQzFaMjFsdW45YjVHazdNS1RiaGo3SEVxc2ZBbmVJSStQSUcrWjhNWT0=" src="/nextcloud/core/js/mimetypelist.js?v=acfa2c95fc538cb1f59e987bcc8c81ee"></script>
                    <script nonce="V25CVit0UHM3NCtURjlidGg2REZJbnpMYlFPZlMyK3NhUDc3YUYzVnRQWT06RmhnQzFaMjFsdW45YjVHazdNS1RiaGo3SEVxc2ZBbmVJSStQSUcrWjhNWT0=" src="/nextcloud/core/vendor/snapjs/dist/latest/snap.js?v=acfa2c95fc538cb1f59e987bcc8c81ee"></script>
                    <script nonce="V25CVit0UHM3NCtURjlidGg2REZJbnpMYlFPZlMyK3NhUDc3YUYzVnRQWT06RmhnQzFaMjFsdW45YjVHazdNS1RiaGo3SEVxc2ZBbmVJSStQSUcrWjhNWT0=" src="/nextcloud/core/vendor/backbone/backbone.js?v=acfa2c95fc538cb1f59e987bcc8c81ee"></script>
                    <script nonce="V25CVit0UHM3NCtURjlidGg2REZJbnpMYlFPZlMyK3NhUDc3YUYzVnRQWT06RmhnQzFaMjFsdW45YjVHazdNS1RiaGo3SEVxc2ZBbmVJSStQSUcrWjhNWT0=" src="/nextcloud/core/js/oc-backbone.js?v=acfa2c95fc538cb1f59e987bcc8c81ee"></script>
                    <script nonce="V25CVit0UHM3NCtURjlidGg2REZJbnpMYlFPZlMyK3NhUDc3YUYzVnRQWT06RmhnQzFaMjFsdW45YjVHazdNS1RiaGo3SEVxc2ZBbmVJSStQSUcrWjhNWT0=" src="/nextcloud/core/js/placeholder.js?v=acfa2c95fc538cb1f59e987bcc8c81ee"></script>
                    <script nonce="V25CVit0UHM3NCtURjlidGg2REZJbnpMYlFPZlMyK3NhUDc3YUYzVnRQWT06RmhnQzFaMjFsdW45YjVHazdNS1RiaGo3SEVxc2ZBbmVJSStQSUcrWjhNWT0=" src="/nextcloud/core/js/jquery.avatar.js?v=acfa2c95fc538cb1f59e987bcc8c81ee"></script>
                    <script nonce="V25CVit0UHM3NCtURjlidGg2REZJbnpMYlFPZlMyK3NhUDc3YUYzVnRQWT06RmhnQzFaMjFsdW45YjVHazdNS1RiaGo3SEVxc2ZBbmVJSStQSUcrWjhNWT0=" src="/nextcloud/core/js/backgroundjobs.js?v=acfa2c95fc538cb1f59e987bcc8c81ee"></script>
                    <script nonce="V25CVit0UHM3NCtURjlidGg2REZJbnpMYlFPZlMyK3NhUDc3YUYzVnRQWT06RmhnQzFaMjFsdW45YjVHazdNS1RiaGo3SEVxc2ZBbmVJSStQSUcrWjhNWT0=" src="/nextcloud/apps/files_pdfviewer/js/previewplugin.js?v=acfa2c95fc538cb1f59e987bcc8c81ee"></script>
                    <script nonce="V25CVit0UHM3NCtURjlidGg2REZJbnpMYlFPZlMyK3NhUDc3YUYzVnRQWT06RmhnQzFaMjFsdW45YjVHazdNS1RiaGo3SEVxc2ZBbmVJSStQSUcrWjhNWT0=" src="/nextcloud/core/js/shareconfigmodel.js?v=acfa2c95fc538cb1f59e987bcc8c81ee"></script>
                    <script nonce="V25CVit0UHM3NCtURjlidGg2REZJbnpMYlFPZlMyK3NhUDc3YUYzVnRQWT06RmhnQzFaMjFsdW45YjVHazdNS1RiaGo3SEVxc2ZBbmVJSStQSUcrWjhNWT0=" src="/nextcloud/core/js/shareitemmodel.js?v=acfa2c95fc538cb1f59e987bcc8c81ee"></script>
                    <script nonce="V25CVit0UHM3NCtURjlidGg2REZJbnpMYlFPZlMyK3NhUDc3YUYzVnRQWT06RmhnQzFaMjFsdW45YjVHazdNS1RiaGo3SEVxc2ZBbmVJSStQSUcrWjhNWT0=" src="/nextcloud/core/js/sharedialogresharerinfoview.js?v=acfa2c95fc538cb1f59e987bcc8c81ee"></script>
                    <script nonce="V25CVit0UHM3NCtURjlidGg2REZJbnpMYlFPZlMyK3NhUDc3YUYzVnRQWT06RmhnQzFaMjFsdW45YjVHazdNS1RiaGo3SEVxc2ZBbmVJSStQSUcrWjhNWT0=" src="/nextcloud/core/js/sharedialoglinkshareview.js?v=acfa2c95fc538cb1f59e987bcc8c81ee"></script>
                    <script nonce="V25CVit0UHM3NCtURjlidGg2REZJbnpMYlFPZlMyK3NhUDc3YUYzVnRQWT06RmhnQzFaMjFsdW45YjVHazdNS1RiaGo3SEVxc2ZBbmVJSStQSUcrWjhNWT0=" src="/nextcloud/core/js/sharedialogexpirationview.js?v=acfa2c95fc538cb1f59e987bcc8c81ee"></script>
                    <script nonce="V25CVit0UHM3NCtURjlidGg2REZJbnpMYlFPZlMyK3NhUDc3YUYzVnRQWT06RmhnQzFaMjFsdW45YjVHazdNS1RiaGo3SEVxc2ZBbmVJSStQSUcrWjhNWT0=" src="/nextcloud/core/js/sharedialogshareelistview.js?v=acfa2c95fc538cb1f59e987bcc8c81ee"></script>
                    <script nonce="V25CVit0UHM3NCtURjlidGg2REZJbnpMYlFPZlMyK3NhUDc3YUYzVnRQWT06RmhnQzFaMjFsdW45YjVHazdNS1RiaGo3SEVxc2ZBbmVJSStQSUcrWjhNWT0=" src="/nextcloud/core/js/sharedialogview.js?v=acfa2c95fc538cb1f59e987bcc8c81ee"></script>
                    <script nonce="V25CVit0UHM3NCtURjlidGg2REZJbnpMYlFPZlMyK3NhUDc3YUYzVnRQWT06RmhnQzFaMjFsdW45YjVHazdNS1RiaGo3SEVxc2ZBbmVJSStQSUcrWjhNWT0=" src="/nextcloud/core/js/share.js?v=acfa2c95fc538cb1f59e987bcc8c81ee"></script>
                    <script nonce="V25CVit0UHM3NCtURjlidGg2REZJbnpMYlFPZlMyK3NhUDc3YUYzVnRQWT06RmhnQzFaMjFsdW45YjVHazdNS1RiaGo3SEVxc2ZBbmVJSStQSUcrWjhNWT0=" src="/nextcloud/apps/files_reader/js/plugin.js?v=acfa2c95fc538cb1f59e987bcc8c81ee"></script>
                    <script nonce="V25CVit0UHM3NCtURjlidGg2REZJbnpMYlFPZlMyK3NhUDc3YUYzVnRQWT06RmhnQzFaMjFsdW45YjVHazdNS1RiaGo3SEVxc2ZBbmVJSStQSUcrWjhNWT0=" src="/nextcloud/apps/files_videoplayer/js/viewer.js?v=acfa2c95fc538cb1f59e987bcc8c81ee"></script>
                    <script nonce="V25CVit0UHM3NCtURjlidGg2REZJbnpMYlFPZlMyK3NhUDc3YUYzVnRQWT06RmhnQzFaMjFsdW45YjVHazdNS1RiaGo3SEVxc2ZBbmVJSStQSUcrWjhNWT0=" src="/nextcloud/apps/notifications/js/app.js?v=acfa2c95fc538cb1f59e987bcc8c81ee"></script>
                    <script nonce="V25CVit0UHM3NCtURjlidGg2REZJbnpMYlFPZlMyK3NhUDc3YUYzVnRQWT06RmhnQzFaMjFsdW45YjVHazdNS1RiaGo3SEVxc2ZBbmVJSStQSUcrWjhNWT0=" src="/nextcloud/apps/notifications/js/notification.js?v=acfa2c95fc538cb1f59e987bcc8c81ee"></script>
                    <script nonce="V25CVit0UHM3NCtURjlidGg2REZJbnpMYlFPZlMyK3NhUDc3YUYzVnRQWT06RmhnQzFaMjFsdW45YjVHazdNS1RiaGo3SEVxc2ZBbmVJSStQSUcrWjhNWT0=" src="/nextcloud/apps/notifications/js/richObjectStringParser.js?v=acfa2c95fc538cb1f59e987bcc8c81ee"></script>
                    <script nonce="V25CVit0UHM3NCtURjlidGg2REZJbnpMYlFPZlMyK3NhUDc3YUYzVnRQWT06RmhnQzFaMjFsdW45YjVHazdNS1RiaGo3SEVxc2ZBbmVJSStQSUcrWjhNWT0=" src="/nextcloud/core/vendor/select2/select2.js?v=acfa2c95fc538cb1f59e987bcc8c81ee"></script>
                    <script nonce="V25CVit0UHM3NCtURjlidGg2REZJbnpMYlFPZlMyK3NhUDc3YUYzVnRQWT06RmhnQzFaMjFsdW45YjVHazdNS1RiaGo3SEVxc2ZBbmVJSStQSUcrWjhNWT0=" src="/nextcloud/core/js/select2-toggleselect.js?v=acfa2c95fc538cb1f59e987bcc8c81ee"></script>
                    <script nonce="V25CVit0UHM3NCtURjlidGg2REZJbnpMYlFPZlMyK3NhUDc3YUYzVnRQWT06RmhnQzFaMjFsdW45YjVHazdNS1RiaGo3SEVxc2ZBbmVJSStQSUcrWjhNWT0=" src="/nextcloud/core/js/jquery-ui-fixes.js?v=acfa2c95fc538cb1f59e987bcc8c81ee"></script>
                    <script nonce="V25CVit0UHM3NCtURjlidGg2REZJbnpMYlFPZlMyK3NhUDc3YUYzVnRQWT06RmhnQzFaMjFsdW45YjVHazdNS1RiaGo3SEVxc2ZBbmVJSStQSUcrWjhNWT0=" src="/nextcloud/core/js/files/fileinfo.js?v=acfa2c95fc538cb1f59e987bcc8c81ee"></script>
                    <script nonce="V25CVit0UHM3NCtURjlidGg2REZJbnpMYlFPZlMyK3NhUDc3YUYzVnRQWT06RmhnQzFaMjFsdW45YjVHazdNS1RiaGo3SEVxc2ZBbmVJSStQSUcrWjhNWT0=" src="/nextcloud/core/js/files/client.js?v=acfa2c95fc538cb1f59e987bcc8c81ee"></script>
                <link rel="stylesheet" href="/nextcloud/index.php/apps/theming/styles?v=0"/><script src="/nextcloud/index.php/apps/theming/js/theming?v=0" nonce="V25CVit0UHM3NCtURjlidGg2REZJbnpMYlFPZlMyK3NhUDc3YUYzVnRQWT06RmhnQzFaMjFsdW45YjVHazdNS1RiaGo3SEVxc2ZBbmVJSStQSUcrWjhNWT0="></script>   </head>
Yetangitu commented 7 years ago

OK, checking your answer in https://github.com/Yetangitu/owncloud-apps/issues/34#issuecomment-287644873 shows that you did, indeed, post the correct <head> tag. It also shows the <base> tag which, as predicted, does not contain index.php. As to whether it should, or whether OC/NC should always be configured to redirect requests for .../apps to .../index.php/apps I'll leave for some other time, but it is clear that this is why it is missing. I'll ask around on the NC/OC lists and/or channels what the consensus is on whether this is a bug or a feature.

Yetangitu commented 7 years ago

BTW, here is the cause of the 'missing index.php' phenomenon:

https://github.com/owncloud/core/pull/14081

There's a lively dicussion as to whether it is a good idea to remove index.php or not.

Yetangitu commented 7 years ago

To make a long discussion a bit longer still, see

https://doc.owncloud.com/server/9.1/admin_manual/configuration_server/index_php_less_urls.html

If you use Apache - as you seem to do - you seem to need to make sure that the .htaccess in the NC directory is writable before you do an update. You also seem to need to make the mentioned changes to config.php and to run occ maintenance:update:htaccess after making the required changes.

If you use nginx - which you do as well, which might complicate matters - you can derive your site configuration from the one shown here:

https://doc.owncloud.com/server/9.1/admin_manual/installation/nginx_examples.html#owncloud-in-the-webroot-of-nginx

I tested this, it works (on plain nginx, no Apache involved).

4oo4 commented 7 years ago

@Yetangitu Awesome, thanks. I'll test that maintenance:update:htaccess command to see if that helps, I didn't realize that not having index.php in the base URL was even an option and just assumed that it was always supposed to be there.

I know I definitely based my nginx config off of what you link to above (as well as the docs for the Apache config), but I realize that sometimes things act a bit strangely since I do the reverse proxy setup. I think for now I'm OK with the workaround in the nginx config instead of messing with the index.php in the URL since I can get bookmarks/annotations to work, but I'll definitely do some reading on that.

Thanks again for the info and for explaining how it all fits together!

4oo4 commented 7 years ago

When I added'htaccess.RewriteBase' => '/nextcloud', to config/config.php and ran occ maintenance:update:htaccess it worked perfectly without the nginx trickery.