html5 pushstate с MAMP
Я работаю над угловым веб-сайтом локально (используя виртуальный хост и псевдоним сервера xip.io) и использую pushstate, чтобы привести в порядок URL-адреса, пронизанные хэшбэнгом. На удаленном сервере я могу использовать.htaccess вместе с базовым href в индексе, чтобы добиться этого, но работая локально, я не смог заставить его работать полностью.
Я могу перемещаться по сайту, и URL меняются соответствующим образом, но если я обновлю страницу, зависимости.js перейдут на 404, и страница будет загружена только наполовину.
Это htaccess, который я пробовал:
# html5 pushstate (history) support:
<ifModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !index
RewriteRule (.*) /index.html [L]
</ifModule>
Это то, что я использовал для корневого htaccess, который не имел никакого эффекта. Однако на сервере файл htaccess должен быть размещен на один уровень выше корневого, поэтому я сделал нечто похожее на моей локальной установке:
# html5 pushstate (history) support:
<ifModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !index
RewriteRule (.*) dist/index.html [L]
</ifModule>
По-прежнему никакого эффекта.
В googling я обнаружил, что это может быть добавлено через файл vhosts, поэтому я сделал это, добавив эти правила в <Directory>
пометить так:
<VirtualHost *:80>
ServerName localmk.ilium1.com
ServerAlias client.*.xip.io
DocumentRoot /Users/mattk/Documents/ilium/web2014/BootstrapRepository/ilium-website-bootstrap/bootstrap/dist
<Directory /Users/mattk/Documents/ilium/web2014/BootstrapRepository/ilium-website-bootstrap/bootstrap/dist>
DirectoryIndex index.html
# html5 pushstate (history) support
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.html$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.html [L]
</IfModule>
</Directory>
</VirtualHost>
Я просто прыгаю в этом материале, и поэтому я довольно невежественен (в случае, если это не показывается здесь). Я могу или не могу задавать правильные вопросы. Любое руководство очень ценится.
РЕДАКТИРОВАТЬ: После перезапуска Apache, страницы, которые я безуспешно пытался обновить ранее, начали делать это. Я был взволнован, ответил на свой вопрос "Перезагрузите сервер" и вернулся к работе счастливым... пока я не обнаружил, что другие представления по-прежнему не обновляются должным образом. Эти шаблоны представления и URL-адреса находятся на один уровень ближе к вершине структуры каталогов, например, представление в /work/
не будет обновляться должным образом / полностью, но вид на /work/somethingelse
обновится просто отлично. Консоль говорит мне Resource interpreted as Script but transferred with MIME type text/html
для каждого из моих файлов.js (которые в конечном итоге объединяются в один через Grunt), а также Uncaught SyntaxError: Unexpected token <
для каждого. Ранее это просто вызывало 404. Не знаю, что происходит.
1 ответ
Ну, это довольно ясно иллюстрирует мою нубишность. Ответ очень прост.
Я забыл перезапустить Apache после редактирования файла vhosts.
Перезапуск сервера работал как шарм. На следующем смущении...