Articles of mod rewrite

如何检查Apache 2.2中是否存在指令

我正在尝试编辑一个configuration文件,以便在Apache 2.2和Apache 2.4上同时运行。 该文件最初是为Apache 2.2编写的,包含以下configuration: RewriteLogLevel 3 RewriteLog /var/log/httpd/apache_rewrite_log 但是,Apache 2.4不再支持RewriteLogLevel 。 相反,在这种情况下,我需要使用: LogLevel alert rewrite:trace6 基本上我想要做的是: <IfDirective LogLevel> LogLevel alert rewrite:trace6 </IfDirective> <IfDirective RewriteLog> RewriteLogLevel 3 RewriteLog /var/log/httpd/apache_rewrite_log </IfDirective> 但是, IfDirective在Apache中似乎并不是什么东西。

Apache重写从原始请求URL中提取多个数据片段

尝试创build一个仅适用于video文件的Apache重写,直到专用的video服务Web服务器。 它需要重写逻辑从原始请求中提取多个信息,包括HTTP_HOST域名,request_uri和目标文件types。 我在寻求帮助和build议方面做了很多工作,经历了大量的试错……只能接近,似乎无法100%正确。 这是我想要完成的: 传入url示例: https://www.example1.com/images/source/vidtest.mp4 预定的着陆URL: https://www.webvideo.com/example1_video/images/source/vidtest.mp4 因此,一个redirect仅适用于以video文件扩展名types(例如.mp4 )结尾的请求,该types仅提取传入的域名(不是前导www ,或者来自原始HTTP_HOST的尾随.com ),并提取剩余的URI ….并将其redirect到一个新的networking服务器,放入一个以原始主机域名命名的video文件夹(例如example1 ),然后是_video ,然后是附加的原始URI的剩余部分。 这里是我现在有的redirect逻辑: RewriteCond %{HTTP_HOST} ^www\.[^.]+\.com$ RewriteCond %{REQUEST_URI} \.(mp4|mp3|mov|mpg|mpeg|webm|wmv|ogg)$ [NC] RewriteRule ^/(.*)$ https://www.webvideo.com/%1_video/$1 [R=301,NC,L,NE] 这似乎是正确的工作,只拿起这些video文件扩展名types之一传入的请求,它正确地redirect到预期的目标www.webvideo.com域,它也正确地附加后面的URI( $1variables)。 但不幸的是,它将input文件types(如mp4 )放在_video之前的%1variables位置,而不是原始域名。 所以这个例子传入的请求导致redirect到这个: https://www.webvideo.com/mp4_video/images/source/vidtest.mp4 有人可以提出一个更正吗? 我需要做些什么才能将原始域名作为variables存入新的文件夹path中,AND是否只将redirect应用于video文件types,并将尾部URI的其余部分也包含在内? 请注意,将有多个不同域的传入请求(这就是为什么需要为新文件夹path提取域名的原因),这些请求都将被redirect到同一个单独的web服务apache目标。

Apache:我如何通过PHP提供JavaScript?

我想通过PHP脚本来提供我的JavaScript文件。 一个例子是: 如果我要请求一个名为dir/my_file.js的JavaScript文件 服务器应该将请求redirect到名为my_script_server.php?src=dir/my_files.js的处理程序脚本my_script_server.php?src=dir/my_files.js 我如何在Apache中做到这一点?

mod-rewrite:replaceurl中的一些字符

是否有可能取代一些URL的正斜线(/)在一个RewriteRule点(。)? 它不必完全用RewriteRule来完成,但绝对不能用脚本来完成。 例1: INPUT:/document/my/document.html OUTPUT:/document-my.document.html 例2: INPUT:/document/depth/of/path/can/vary.html 输出:/document-depth.of.path.can.vary.html

Apache mod_rewrite在Mac OS X 10.6(Snow Leopard)上无法正常工作

我试图用Apache的mod_rewrite创build一个干净的URL的PHP​​网站,使用.htaccess文件。 mod_rewrite似乎工作,但是,它声称它不能find我的服务器上存在的文件。 就像一个基本的testing,这是我的.htaccess文件现在看起来像 – 去[mysite] /页面应该redirect到index.php文件: Options +FollowSymLinks RewriteEngine on RewriteRule ^page$ index.php Afaik,我也正确设置了.conf文件: <Directory "/Users/myuser/Sites/"> Options Indexes MultiViews AllowOverride All Order allow,deny Allow from all </Directory> 但是,当我尝试通过mod_rewrite(localhost /〜myuser / mysite / page)访问URL设置时,我得到这个: Not Found The requested URL /Users/myuser/Sites/mysite/index.php was not found on this server. 但是,该文件确实存在,这是正确的位置! 如果我去localhost /〜myuser / mysite / index.php,一切正常 – 当然减去任何干净的URL,该网站工作正常。 有没有人看过这个/有任何想法,我做错了什么?

configurationhtaccess / mod_rewrite在URL中提供带有问号的静态文件

我刚刚承担了一个从asp转换为静态html的古代网站,由约6000个文件组成。 但是,我的服务器不喜欢文件名,给出了一个404错误。 这些url都是以下格式: filename.asp?id=123&a=something.html 其中id始终是一个整数,而a总是一串字符和数字。 有什么办法可以使用htaccess和mod_rewrite来告诉它,问号是URL的一部分,而不是表示一个查询string?

服务器记住旧的重写规则,即使我删除htaccess

我已经build立了一个Ubuntu和LAMP的开发服务器,但由于某种原因.htaccess奇怪的… 有一个网站上有一套规则,当我评论他们仍然工作,甚至当我将文件重命名为.htaccesss仍然工作! 如果我删除文件中的所有内容,它仍然可以正常工作,每当我进行更改时,重新启动Apache。 我已经尝试重新安装Apache,并重新安装重写模块,它仍然无法正常工作… 我添加的任何新规则似乎都没有任何影响,所以它正在从其他地方看到规则。 如果我通过在/ .htaccess文件中导致语法错误,我得到一个500服务器错误。 有caching规则的地方吗? 我从来没有遇到过这个问题! 编辑 :我解决了这个问题,通过在我的.htaccess文件中添加Options -Multiviews

Apacheredirect文件夹到子域

客户在www.domain.com/dir上有一个应用程序。 他们现在在dir.domain.combuild立了一个子域名。 子域引用存储在www.domain.com/dir中的文件。 他们现在喜欢访问www.domain.com/dir的人被redirect到dir.domain.com。 我猜我需要一个.htaccess来坐在www.domain.com/dir,如果通过www访问,redirect到子域,只是不确定的语法。

重写HOST而不redirect到重写的主机名,这可能吗?

我的服务提供商只有一个虚拟主机可用,文件夹结构与此类似: 域 primarydomain.ext 统计 万维网 次要(< – 这是“secondary.primarydomain.ext”的文件夹) 我有域“primarydomain.ext”注册和工作。 我有另一个域名“secondary.ext”,并指向同一个Web服务器。 服务提供商允许这个,现在它像primarydomain.ext的别名一样。 我想使用mod_rewrite在内部重写“secondary.ext”到“secondary.primarydomain.ext”并像那样处理它(以名为secondary的文件夹作为根目录)。 浏览器中的url应该保持“secondary.ext”! 我使用的解决scheme是将以下内容存储在位于“primarydomain.ext”文件夹内的.htaccess文件中,但将浏览器URL更新为“secondary.primarydomain.ext”: RewriteEngine On RewriteCond %{HTTP_HOST} secondary.ext$ [NC] RewriteRule ^(.*)$ http://secondary.primarydomain.ext [L] 我怎样才能解决这个问题,使浏览器的URL不更新,或其他解决scheme给我所需的效果? (注意:我的提供者不能(不想)为未注册的域创build一个新的虚拟主机,所以他们指出我这个解决scheme,但不提供对它的支持。)

RewriteRules不会停止与最后一个标志?

我似乎在使用Apache 2.2的Rewrite模块(在FreeBSD 8上运行)时遇到了麻烦。 我的.htaccess文件如下所示: Options -Indexes RewriteEngine on RewriteRule ^xpaste$ cross.php [L] RewriteRule ^x([a-f0-9]*)$ cross.php?id=$1 [L] RewriteRule ^(gen|[a-f0-9]+)$ index.php?$1 [L] RewriteRule ^(.*)$ index.php [L] 然而不知何故,最后一条规则超越了其他三条。 一旦我发表评论,其他规则按预期工作: www.mysite.com/xpaste打开“cross.php” www.mysite.com/x132633打开“cross.php?id = 132633” www.mysite.com/gen打开“index.php?gen” 我已经尝试了各种RewriteRule上的L,NS和S = n标志的各种组合,但除非我注释掉最后一条规则,否则一切都会被引导到index.php。 一旦发现匹配,我该如何让Apache停止处理RewriteRules?