html5 具有代理和排除项的推送状态的 Apache 重写规则
Apache rewrite rule for html5 pushstate with proxy and exclusions
我使用 apache
作为 http
服务器,tomcat8
作为应用程序服务器 (rest
),express
作为 angular2
静态服务器.
以下是我的虚拟主机元素
<VirtualHost *:80>
... other things - name path and logs ...
ProxyPass /rest/ http://localhost:8080/rest/
ProxyPassReverse /rest/ http://localhost:8080/rest/
ProxyPass / http://localhost:3000/
ProxyPassReverse / http://localhost:3000/
</VirtualHost>
基本上我正在做的是,每当有人点击 http://localhost
他应该看到托管在 http://localhost:3000
上的静态网络应用程序,当有人(网络应用程序)请求 http://localhost/rest
,请求应在 8080
到达 tomcat8
进行休息。
这工作正常。
现在我想要什么
我正在使用 express
服务于 angular2
应用程序的静态服务器。此应用程序使用 html5
pushState
作为路由器。每当用户刷新页面时,都会显示未找到错误。
我想要重定向规则,重定向如下
http://localhost/somepath
=> http://localhost?redirect=/somepath
http://localhost/rest
=>(不重写但继续代理)http://localhost:8080/rest
我在这里不知道如何使用重写规则。
RewriteEngine on
RewriteCond %{REQUEST_URI} !(/rest/)
RewriteCond "%{QUERY_STRING}" "!(.*(?:^|&))_redirect=([^&]*)&?(.*)&?$"
RewriteRule "^/?(.*)" "http://localhost?_redirect=" [L,R,NE,QSA]
以上是我的代码,但它不起作用。谁能给我建议合适的条件和规则?
这就是我最终要做的
RewriteEngine on
// exception for everything which is on the webapp but has physical path
RewriteCond %{REQUEST_URI} !(/rest/)
RewriteCond %{REQUEST_URI} !(/bootstrap-template/)
RewriteCond %{REQUEST_URI} !(/lib/)
RewriteCond %{REQUEST_URI} !(/app/)
RewriteCond %{REQUEST_URI} !(/assets/)
RewriteCond %{REQUEST_URI} !(/browser-sync/)
RewriteCond %{REQUEST_URI} !(/node_modules/)
RewriteCond %{REQUEST_URI} !(/styles.css)$
RewriteCond %{REQUEST_URI} !(/Helvetica.otf)$
// exceptions end
RewriteCond %{REQUEST_URI} (/)(.+)$
RewriteCond "%{QUERY_STRING}" "!(.*(?:^|&))_redirect=([^&]*)&?(.*)&?$"
RewriteRule "^/(.*)" "http://localhost?_redirect=" [L,R,NE,QSA]
ProxyPass /pixie/ http://localhost:8080/pixie/
ProxyPassReverse /pixie/ http://localhost:8080/pixie/
ProxyPass / http://localhost:3000/
ProxyPassReverse / http://localhost:3000/
我使用 apache
作为 http
服务器,tomcat8
作为应用程序服务器 (rest
),express
作为 angular2
静态服务器.
以下是我的虚拟主机元素
<VirtualHost *:80>
... other things - name path and logs ...
ProxyPass /rest/ http://localhost:8080/rest/
ProxyPassReverse /rest/ http://localhost:8080/rest/
ProxyPass / http://localhost:3000/
ProxyPassReverse / http://localhost:3000/
</VirtualHost>
基本上我正在做的是,每当有人点击 http://localhost
他应该看到托管在 http://localhost:3000
上的静态网络应用程序,当有人(网络应用程序)请求 http://localhost/rest
,请求应在 8080
到达 tomcat8
进行休息。
这工作正常。
现在我想要什么
我正在使用 express
服务于 angular2
应用程序的静态服务器。此应用程序使用 html5
pushState
作为路由器。每当用户刷新页面时,都会显示未找到错误。
我想要重定向规则,重定向如下
http://localhost/somepath
=> http://localhost?redirect=/somepath
http://localhost/rest
=>(不重写但继续代理)http://localhost:8080/rest
我在这里不知道如何使用重写规则。
RewriteEngine on
RewriteCond %{REQUEST_URI} !(/rest/)
RewriteCond "%{QUERY_STRING}" "!(.*(?:^|&))_redirect=([^&]*)&?(.*)&?$"
RewriteRule "^/?(.*)" "http://localhost?_redirect=" [L,R,NE,QSA]
以上是我的代码,但它不起作用。谁能给我建议合适的条件和规则?
这就是我最终要做的
RewriteEngine on
// exception for everything which is on the webapp but has physical path
RewriteCond %{REQUEST_URI} !(/rest/)
RewriteCond %{REQUEST_URI} !(/bootstrap-template/)
RewriteCond %{REQUEST_URI} !(/lib/)
RewriteCond %{REQUEST_URI} !(/app/)
RewriteCond %{REQUEST_URI} !(/assets/)
RewriteCond %{REQUEST_URI} !(/browser-sync/)
RewriteCond %{REQUEST_URI} !(/node_modules/)
RewriteCond %{REQUEST_URI} !(/styles.css)$
RewriteCond %{REQUEST_URI} !(/Helvetica.otf)$
// exceptions end
RewriteCond %{REQUEST_URI} (/)(.+)$
RewriteCond "%{QUERY_STRING}" "!(.*(?:^|&))_redirect=([^&]*)&?(.*)&?$"
RewriteRule "^/(.*)" "http://localhost?_redirect=" [L,R,NE,QSA]
ProxyPass /pixie/ http://localhost:8080/pixie/
ProxyPassReverse /pixie/ http://localhost:8080/pixie/
ProxyPass / http://localhost:3000/
ProxyPassReverse / http://localhost:3000/