使用 Apache2 路由 React 页面的问题
Issues Routing React page using Apache2
我的 React 页面上的主页以外的访问路径存在问题,该页面托管在 Apache2 网络服务器上。
这是页面:www.TJBrackett.com
我尝试将 .htaccess 文件添加到包含 index.html 文件的文件夹中,但这会导致 500 错误。
Apache2:
ServerName tjbrackett.com
ServerAdmin webmaster@tjbrackett.com
ServerAlias *.tjbrackett.com
DocumentRoot /var/www/tjbrackett.com
<Directory /var/www/tjbrackett.com>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Require all granted
Order allow, deny
allow from all
</Directory>
.htaccess 文件:
RewriteEngine On
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} -f [OR]
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} -d
RewriteRule ^ - [L]
RewriteRule ^ /index.html [L]
反应 index.js:
ReactDOM.render(
<BrowserRouter
basename="http://www.tjbrackett.com">
<Route exact path='/' component={App} />
<Route exact path='/contact' component={Contact} />
<Route exact path='/about' component={About} />
</BrowserRouter>,
document.getElementById('root')
)
我如何尝试在 React 页面中进行路由:
<a href="http://www.tjbrackett.com/about">
这是我第一次进入 apache2 和一般的虚拟主机。我不确定我是否需要设置一个快速后端来为路由提供服务,或者我是否需要为此项目设置 docker。非常感谢任何帮助和提示。
编辑:修复了 500 错误问题。 apache 未指向 .htaccess 文件。
通过将每个 "a href" 更改为反应 "link to" 解决了这个问题。还做了其他各种改动。
新的 .htaccess 文件:
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^.*$ / [L,QSA]
新 React index.js:
ReactDOM.render(
<BrowserRouter>
<Route exact path='/' component={App} />
<Route exact path='/contact' component={Contact} />
<Route exact path='/about' component={About} />
</BrowserRouter>,
document.getElementById('root')
)
新页面链接:
<Link to="/about"></Link>
编辑:如果您在 Apache 中重新加载时遇到 React 中断问题,这就是我将 Apache 文件更改为的内容。 React index.js 文件也发生了一些变化。
ServerName www.tjbrackett.com
ServerAdmin webmaster@tjbrackett.com
ServerAlias *.tjbrackett.com
DirectoryIndex index.html
DocumentRoot /var/www/tjbrackett.com
<Directory /var/www/tjbrackett.com>
order allow,deny
allow from all
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^(.*) /index.html [NC,L]
</Directory>
我的 React 页面上的主页以外的访问路径存在问题,该页面托管在 Apache2 网络服务器上。
这是页面:www.TJBrackett.com
我尝试将 .htaccess 文件添加到包含 index.html 文件的文件夹中,但这会导致 500 错误。
Apache2:
ServerName tjbrackett.com
ServerAdmin webmaster@tjbrackett.com
ServerAlias *.tjbrackett.com
DocumentRoot /var/www/tjbrackett.com
<Directory /var/www/tjbrackett.com>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Require all granted
Order allow, deny
allow from all
</Directory>
.htaccess 文件:
RewriteEngine On
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} -f [OR]
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} -d
RewriteRule ^ - [L]
RewriteRule ^ /index.html [L]
反应 index.js:
ReactDOM.render(
<BrowserRouter
basename="http://www.tjbrackett.com">
<Route exact path='/' component={App} />
<Route exact path='/contact' component={Contact} />
<Route exact path='/about' component={About} />
</BrowserRouter>,
document.getElementById('root')
)
我如何尝试在 React 页面中进行路由:
<a href="http://www.tjbrackett.com/about">
这是我第一次进入 apache2 和一般的虚拟主机。我不确定我是否需要设置一个快速后端来为路由提供服务,或者我是否需要为此项目设置 docker。非常感谢任何帮助和提示。
编辑:修复了 500 错误问题。 apache 未指向 .htaccess 文件。
通过将每个 "a href" 更改为反应 "link to" 解决了这个问题。还做了其他各种改动。
新的 .htaccess 文件:
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^.*$ / [L,QSA]
新 React index.js:
ReactDOM.render(
<BrowserRouter>
<Route exact path='/' component={App} />
<Route exact path='/contact' component={Contact} />
<Route exact path='/about' component={About} />
</BrowserRouter>,
document.getElementById('root')
)
新页面链接:
<Link to="/about"></Link>
编辑:如果您在 Apache 中重新加载时遇到 React 中断问题,这就是我将 Apache 文件更改为的内容。 React index.js 文件也发生了一些变化。
ServerName www.tjbrackett.com
ServerAdmin webmaster@tjbrackett.com
ServerAlias *.tjbrackett.com
DirectoryIndex index.html
DocumentRoot /var/www/tjbrackett.com
<Directory /var/www/tjbrackett.com>
order allow,deny
allow from all
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^(.*) /index.html [NC,L]
</Directory>