(*正如一些评论建议,我已按照this answer删除index.ejs
并在项目中使用index.html
。所以我调整了我的OP *)
我在Mac中使用apache
开发了一个可以请求的MEAN堆栈应用程序
https://localhost:3000/#/home
。在使用nginx
服务器的生产中,可以请求应用程序
https://www.myapp.io/#/home
。由于#
,所有情况下都需要片段标识符angular ui-router
。
所以我想在没有#
(例如,https://www.myapp.io/home
,https://localhost:3000/home
)的情况下制作漂亮的网址。我做了以下事情:
1)在$locationProvider.html5Mode(true); $locationProvider.hashPrefix('')
中添加app.config(['$stateProvider'...
。
2)在<base href="/" />
index.html
因此,https://localhost:3000/#/home
会自动更改为浏览器栏中的https://localhost:3000/home
,类似于https://www.myapp.io/#/home
。
但是,在浏览器中直接输入https://localhost:3000/home
或https://www.myapp.io/home
会引发错误(我不知道如何将<h1><%= message %></h1><h2><%= error.status %></h2><pre><%= error.stack %></pre>
中之前的error.ejs
转为{ {1}},所以我没有更多细节。
现在,我们的目标是让error.html
和https://localhost:3000/home
发挥作用。
通过关注this thread,我将以下内容添加到https://www.myapp.io/home
:
app.js
在app.use('/js', express.static(__dirname + '/js'));
app.use('/dist', express.static(__dirname + '/../dist'));
app.use('/css', express.static(__dirname + '/css'));
app.use('/partials', express.static(__dirname + '/partials'));
app.all('/*', function(req, res, next) {
res.sendFile('index.html', { root: __dirname });
});
的{{1}}中,重新启动apache
后,这是我的mac
,
httpd-vhosts.conf
仍然会返回错误。
apache
在生产中,这是nginx服务器块。重新启动nginx后,https://localhost:3000/home
仍然会返回错误。
<VirtualHost *:443>
ServerName localhost
DocumentRoot "/Users/SoftTimur"
SSLEngine on
SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
SSLCertificateFile /etc/apache2/ssl/localhost.crt
SSLCertificateKeyFile /etc/apache2/ssl/localhost.key
<Directory "/Users/SoftTimur">
RewriteEngine on
# Don't rewrite files or directories
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
# Rewrite everything else to index.html to allow html5 state links
RewriteRule ^ index.html [L]
Options Indexes FollowSymLinks
AllowOverride All
Order allow,deny
Allow from all
Require all granted
</Directory>
</VirtualHost>
有人可以帮忙吗?
答案 0 :(得分:1)
我认为你应该问自己更好的问题是为什么你没有index.html?也许我已经睡了太久了,但是浏览器实际上不能在网页上自己执行JavaScript,而没有来自HTML文档的底层DOM。
一旦你弄明白了,你可能会成功获得GitHub上angular-ui的官方配置建议。
答案 1 :(得分:0)
删除您添加的nginx配置。这可以通过执行以下操作来实现:
有两件事需要做。
配置$ locationProvider
- 醇>
设置相关链接的基础
有关如何完成此操作的更多详细说明,请参阅以下链接: Pretty URLs in AngularJS: Removing the #
对于Angular 1.6,您还需要更改hashPrefix:
appModule.config(['$locationProvider', function($locationProvider) {
$locationProvider.html5Mode(true);
$locationProvider.hashPrefix('');
}]);
我在你的问题中知道你曾说过你已经完成了这两个步骤,但是如果你完全按照本教程进行操作,它就可以在我自己的Angular应用程序(也是通过nginx托管)上测试它。
要使用服务器配置路由,我建议您点击以下链接: AngularJS with Pretty URLs: Removing the # in Amazon S3
此外,here是要进行的实际服务器配置更改。
最后,我认为你对ejs的运作方式错了。它需要HTML引导(毕竟,你必须有某种index.html,类似<script src="https://npmcdn.com/ejs/ejs.min.js"></script>
),或者在服务器上处理(例如,与nodejs和/或朋友)。