问题标签 [mod-rewrite]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
apache - .htaccess 指令*不*重定向某些 URL
在一个严重依赖.htaccess
RewriteRules 的 PrettyURLs(在我的例子中是 CakePHP)的应用程序中,我如何正确设置指令以从重写中排除某些目录?那是:
默认情况下,每个请求/appRoot/*
都被重写以被 接收app/webroot/index.php
,并在其中对其进行分析并调用相应的控制器操作。这是通过以下指令完成的.htaccess
:
我现在想从这个重写中排除一些像 static/ 这样的目录。我在 Cake RewriteRules之前试过这个:
到目前为止,它不再重写请求,但现在所有请求都被跳过,甚至是不应该匹配的合法 Cake 请求^(static|otherDir).*$
。
我尝试了这些规则的几种变体,但无法让它按我想要的方式工作。
security - 使用 HTTP_REFERER 阻止用户访问站点内部
我可以控制 HttpServer,但不能控制 ApplicationServer 或坐在那里的 Java 应用程序,但我需要阻止直接访问这些应用程序上的某些页面。准确地说,我不希望用户自动访问向适当的 servlet 发出直接 GET/POST HTTP 请求的表单。
所以,我决定根据HTTP_REFERER
. 毕竟,如果用户在网站内部导航,它会有一个合适的HTTP_REFERER
. 嗯,我就是这么想的。
我在 .htaccess 文件中实现了一个重写规则,上面写着:
我希望禁止访问未浏览站点但使用查询字符串向“servlet1”或“servlet2”servlet 发出直接 GET 请求的用户。但是我的期望突然结束了,因为正则表达式(servlet1|servlet2)/.+\?.+
根本不起作用。
当我将该表达式更改为时,我真的很失望,(servlet1|servlet2)/.+
而且效果如此之好,以至于我的用户无论是否浏览该网站都会被屏蔽。
所以,我的问题是:如果我没有访问/特权/时间来修改应用程序,我如何才能完成不允许“机器人”直接访问某些页面的事情?
apache - 使用 mod_rewrite 模拟 SSL 虚拟主机?
通过与 Apache 2.2 的 SSL 连接透明地重写 URL 的最佳方法是什么?
Apache 2 本身不支持 SSL 连接的多个基于名称的虚拟主机,我听说 mod_rewrite 可以帮助解决这个问题。我想做这样的事情:
我已经设置了服务器,以便可以通过以下方式访问站点
https://secure.example.com/dbadmin
但我想将此作为https://dbadmin.example.com
如何设置它以便重写规则将 dbadmin.example.com 重写为 secure.example.com/dbadmin,但不会在客户端的地址栏上显示重写(即客户端仍然只会看到 dbadmin.example.com ),到处都是https?
.htaccess - Mod-Rewrite 在 DocumentRoot 后面加载文件
我正在使用.htaccess
andmod_rewrite
指向位于 DocumentRoot 后面的文件。我的文件夹结构如下所示:
我.htaccess
在 webroot 中有一个文件,内容如下:
如果我尝试访问http://example.com/file.html,我会收到以下错误:
在此服务器上未找到请求的 URL /home/other_files/file.html。
甚至可以加载 DocumentRoot 后面的文件吗?如果是这样,有人可以指出我正确的方向吗?
apache - mod_rewrite 将一个文件后缀类型别名为另一个
我希望我能足够清楚地解释这一点,但如果不让我知道,我会尽力澄清。
我目前正在使用 ColdFusion 开发一个站点,并设置了一个 mod_rewrite 规则,以使其看起来像该站点正在使用 PHP。index.php 的任何请求都由 index.cfm 处理(规则将 *.php 映射到 *.cfm)。
这很好用——到目前为止,很好。问题是如果直接请求 index.cfm(或任何 ColdFusion 页面),我想返回 404 状态代码。
如果我尝试使用 mod_rewrite 阻止对 *.cfm 文件的访问,它还会返回 404 以请求 *.php。
我想我可能不得不更改我的 Apache 配置而不是使用 .htaccess
apache - mod_rewrite 规则重定向除一个特定路径之外的所有请求
我正在尝试使用 Apache 2.2 VirtualHost 声明中的 mod_rewrite 将所有对我的域的请求重定向到另一个域。对此有一个例外——我希望不对/audio
路径的所有请求进行重定向。
我已经写了一个 RewriteCond 和 RewriteRule 来做到这一点,但这并不完全正确,我不知道为什么。正则表达式包含字符串“/audio”的负前瞻,但由于某种原因,这不匹配。这是定义:
如果我将 RewriteCond 更改为:
(即,将正斜杠放在负前瞻部分之外)然后它可以工作,但这样做的缺点是对 mydomain.net 的请求没有尾部斜杠将不会被重定向。
谁能指出我做错了什么?
(注意:上面 RewriteRule 位中域周围的尖括号是由 StackOverflow.com 添加的——它们在实际代码中不存在!)
以下是规则:
谢谢@mercutio - 这很有意义,但它似乎仍然不起作用。
这是我向http://mydomain.net/audio/something.mp3发出请求时 mod_rewrite 日志所说的内容:
由于 REQUEST_URI 确实以/audio
我希望 RewriteRule 被忽略。
performance - 使用 Mod-Rewrite 有什么负面影响吗?
我知道 mod-rewrite 完成了很多积极的事情。但是有负面的吗?显然,如果你的规则写得不好,你就会遇到问题。但是,如果您有一个大容量站点并且您经常使用 mod-rewrite,它会对性能产生重大影响吗?我在 Google 上快速搜索了一些基准,但没有找到太多。
apache - Apache - 我如何将单个和/或所有模块构建为共享模块
在 Mac OS X 10.5 上,我下载了最新版本的 Apache 2.2.9。在通常的配置、制作、安装舞蹈之后,我构建了一个没有 mod_rewrite 的 apache。这不是静态链接的,模块也没有构建在 /modules 文件夹中。
我必须执行以下操作来构建 Apache 和 mod_rewrite:
- 有没有办法告诉 Apache 将所有模块构建为共享模块 (DSO),以便我可以控制从 Apache 配置加载?
- 既然我已经构建了 Apache 和 mod_rewrite DSO,如何在不构建所有 Apache 的情况下构建另一个共享模块?
(上次我在 Solaris 上构建 Apache(2.2.8)时,默认情况下它将所有内容构建为共享模块。)
apache - Apache基于子域的重写
我正在尝试将通配符域的请求重定向到子目录。
IE。something.blah.example.com
-->blah.example.com/something
我不知道如何获取要在重写规则中使用的子域名。
最终解决方案:
或者正如 pilif 所指出的那样
iis - IIS 7.0 的 mod_rewrite 等效项
是否有 IIS 7.0 的 mod_rewrite 等效项
a) 或多或少完整
b) 适用于生产环境,即久经考验/可靠/安全
你有基于经验的推荐吗?