【问题标题】:How prevent access if the request URL doesn't have string in .htacess如果请求 URL 在 .htaccess 中没有字符串,如何阻止访问
【发布时间】:2021-06-23 15:44:03
【问题描述】:

我有一个别名域名,我不希望它加载网站。 如果请求 URL 具有特定字符串,我只希望我的别名域可以访问。

示例:www.myalias.com/pass/whatever/here

我正在查看的字符串是“pass” 如果请求 URL 有“pass”,则允许访问该网站,如果没有则返回 404 错误。

该规则将检查域名是否等于“myalias.com”,然后检查请求 URL 中是否存在字符串“pass”。

如何将其写入 .htaccess 中的规则?

【问题讨论】:

  • 你有没有试过任何规则?你能显示你当前的 .htaccess

标签: regex apache .htaccess


【解决方案1】:

听起来很简单:您检查 http 主机,是否存在 pass 并根据需要做出反应:

这会拒绝请求

RewriteEngine on
RewriteCond %{HTTP_HOST} ^alias\.example\.com$
RewriteCond %{REQUEST_URI} !^/pass/
RewriteRule ^ - [F]

那个发送一个自定义的http状态(这里是403):

RewriteEngine on
RewriteCond %{HTTP_HOST} ^alias\.example\.com$
RewriteCond %{REQUEST_URI} !^/pass/
RewriteRule ^ - [R=403]

或者您可以将客户重定向到您想要的任何地方:

RewriteEngine on
RewriteCond %{HTTP_HOST} ^alias\.example\.com$
RewriteCond %{REQUEST_URI} !^/pass/
RewriteRule ^ https://example.com/ [R=301]

您显然需要在您的 http 服务器中加载重写模块。通常,此类规则应在实际 http 服务器的主机配置中实现。如果你真的想使用分布式配置文件(“.htaccess”),你需要先启用它的解释(参见AllowOverride指令的文档)。

【讨论】:

  • 不工作,不知道为什么总是响应 403,即使 /pass/ 是 url 的一部分。
  • 当你检查是否存在时它会起作用,但是当你添加 !^ 时它总是响应 403 错误。有什么建议吗?
  • 您使用的是哪种变体?
  • 我用这个:RewriteEngine on RewriteCond %{HTTP_HOST} ^alias\.example\.com$ RewriteCond %{REQUEST_URI} !^/pass/ RewriteRule ^ - [R=403]
  • 规则集正确且有效。如果您收到不同的结果,您还有另一个因素在这里介入:缓存的结果、您未提及的其他一些规则、对与您声明的内容不同的 URI 的请求。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-18
  • 2015-03-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多