我有一个带有如下 URL 的页面:
https://example.com:3000/newsite
但我希望能够从这里访问它:
https://example.com/newsite
并屏蔽 URL,这样它就会始终显示最后一个之前的所有内容/
我尝试过这样的:
RewriteRule ^:3000/newsite/?$ /site/
但它不起作用。为什么?
我的整体.htaccess
看起来像这样,因为我已经有一些其他必须保持不变的规则:
<IfModule mod_rewrite.c>
Options -MultiViews
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule \.(jpeg|jpg|gif|png)$ /public/404.php [NC,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L] <---everything up to this point has to stay the same
RewriteRule ^:3000/newchat/?$ /chat/
</IfModule>
答案1
RewriteRule ^:3000/newsite/?$ /site/
您不能简单地以这种方式(使用内部重写)从请求的 URL 中“删除”端口号。
按照您的要求去做需要您配置一个反向代理(这可能需要更改服务器配置),但您仍然需要实际更改您网站上的 URL 以从所有内部链接中删除端口号。
但是,为了配置反向代理(从端口 443(HTTPS)到网站实际运行的端口 3000),您需要将服务器配置为听打开并接受对端口 443 的请求(以及将端口 80(HTTP)重定向到端口 443(HTTPS))。
但是如果你有权访问可以配置上述所有内容的服务器,那么为什么不直接在标准端口(即 443)上提供内容呢?(这引出了一个问题,为什么一开始使用端口 3000?)