regex - .htaccess 重写除特定 http_host 之外的任何内容的规则

标签 regex apache .htaccess mod-rewrite url-rewriting

问题的背景:

我正在通过 cPanel 使用共享主机,而在我当前的主机设置中,我无法创建额外的虚拟主机。目前为了降低成本,我试图避免更多的复杂性,所以我有几个网站符号链接(symbolic link)到 public_html

 public_html /
 |
 |---> siteone.net /
 |
 |---> sitetwo.com /
 |
 |---> sitethree.net.au /
 |
 |--  (etc)

.

问题:

'sitetwo.com' 可以从 siteone.net 访问为 http://siteone.net/sitetwo.com/

.

解决方案的目标:

我的目标是阻止访问其他站点的站点文件夹。我只是模拟虚拟主机,这显然不理想,但我需要再做几个月。

注意:目前域是使用 htaccess 代码路由的,如下所示:

 RewriteCond %{HTTP_HOST} ^(www.)?siteone.net$
 RewriteCond %{REQUEST_URI} !^/siteone/
 RewriteCond %{REQUEST_FILENAME} !-f
 RewriteCond %{REQUEST_FILENAME} !-d
 RewriteRule ^(.*)$ /siteone/$1
 RewriteCond %{HTTP_HOST} ^(www.)?siteone.net$
 RewriteRule ^(/)?$ siteone/index.php [L]

.

尝试的解决方案:

我的目标是将任何未通过 siteone.com 路由到 404 的内容重定向:

 RewriteCond %{HTTP_HOST} !^(www.)?siteone.net$
 RewriteCond %{REQUEST_URI} ^/siteone.net/
 RewriteRule -- serve 404 page ----- [L]

这没有用。 mod_rewrite 手册和谷歌似乎不认为在重写条件下 NOT 逻辑可用于 HTTP_HOST ......否则我没有正确阅读它。

如有任何帮助,我们将不胜感激。

最佳答案

确定将此代码添加为 /siteone.net/.htaccess 中的第一条规则:

RewriteEngine On

RewriteCond %{HTTP_HOST} !^(www\.)?siteone\.net$ [NC]
RewriteRule ^ - [F]

可选地,如果 sitetwo.com 不存在 .htaccess,则使用:

RewriteEngine On

RewriteCond %{HTTP_HOST} !^(www.)?sitetwo\.com$ [NC]
RewriteRule ^sitetwo\.com/ - [NC,F]

关于regex - .htaccess 重写除特定 http_host 之外的任何内容的规则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20216895/

相关文章:

正则表达式替换R中的所有上标

regex - Perl解析带有嵌入式逗号的CSV文件

apache - com.sun.ws.rs.ext.RuntimeDelegateImpl 错误

javascript - 如何让nodejs在没有端口号的情况下在Apache服务器上运行

linux - htaccess 将子文件夹重定向到子域

apache - .htaccess 重定向到外部 URL,同时隐藏重定向

vb.net - 将字符串解析为指定长度(不切词)

python - 如何在python中超时功能,超时不到一秒

php - Apache gettext 窗口不工作/翻译

javascript - 通过 .htaccess 强制 https,并使用 fetch 生成一个 post http url 异常