Articles of mod rewrite

mod_rewrite规则

我需要一个mod_rewrite规则,将所有请求发送到index.php,除非请求是针对/ media /文件夹中的任何内容。 我有一个lighttpd类似的规则,但我不知道正则expression式/ mod_rewrite更改为Apache。 url.rewrite-once = ( "/(media)/(.*)" => "/$1/$2", "^([^\?]*)(\?(.+))?$" => "/index.php?url=$1&$3", ) 谢谢

我如何防止Apache在非SSL站点上请求凭据

我有一个Web服务器与几个虚拟主机。 其中一些主机有一个关联的ssl站点。 我在我的主要configuration文件中有一个DirectoryMatch指令,它需要对作为目录path一部分的受保护的任何目录进行基本身份validation。 在具有SSL站点的站点上,我有一个重写规则(位于该站点的非SSLconfiguration中),redirect到SSL站点,同一个URI。 问题是http(80)站点首先要求凭据,然后https(443)站点再次请求凭据。 我想阻止http站点询问,从而避免有人input凭据并以明文forms发送。 我知道我可以将DirectoryMatch移动到特定的站点,只要将auth语句放在SSLconfiguration文件中,但是这会引入在创build新站点时忘记保护关键目录的可能性。 这里是相关的声明:httpd.conf(所有站点): <DirectoryMatch "_secured_"> AuthType Basic AuthName "+ + + Restrcted Area on Server + + +" AuthUserFile /home/websvr/.auth/std.auth Require valid-user </DirectoryMatch> site.conf(具体到个人网站) <DirectoryMatch "_secured_"> RewriteEngine On RewriteRule .*(_secured_.*) https://site.com/$1 </DirectoryMatch> 有没有办法在主configuration文件中离开DirectoryMatch并阻止来自http站点的授权请求? 在Ubuntu 10.04服务器上从默认包运行Apache 2。 我有AllowOverride设置为无 – 我喜欢处理configuration文件而不是.htaccess中的东西。

使用mod_rewrite将/ cgi-bin / abc作为/ def来屏蔽

我有一个看起来很容易的任务,但不知何故,我不能得到它的工作: 我的httpd.conf中有一些有趣的行: … DocumentRoot "D:/opt/apache/htdocs" … ScriptAlias /cgi-bin/ "D:/opt/apache/cgi-bin/" … <Directory "D:/opt/apache/htdocs"> Options Indexes FollowSymLinks ExecCGI AllowOverride None Order allow,deny Allow from all </Directory> <Directory "D:/opt/apache/cgi-bin/"> AllowOverride None Options ExecCGI Order allow,deny Allow from all </Directory> (我知道这是愚蠢的,但它只是一个testing机器:D。) 现在,我有d:\opt\apache\cgi-bin\expired.pl ,我期望GET /licensecheck.php?code=123456 。 我希望让客户认为它使用/licensecheck.php ,但实际上通过\expired.pl返回数据。 我所尝试的是在http.conf的末尾设置以下http.conf : RewriteEngine on RewriteRule ^/licensecheck.php$ /cgi-bin/expired.pl [T=application/x-httpd-cgi,L] …但它保持404我,在我的DocumentRoot中寻找cgi-bin 目录 (不是cgi-bin \ […]

代理模式下的Apache mod_rewrite,.htaccess和ProxyPassReverse

在.htaccess文件中,我有这样的代理到Tomcat的Apache: RewriteRule (.*) http://localhost:8080/tomcat-app/$1 [P] 所有redirect以及HTML文件中的内部链接直接转到Tomcat应用程序,而不是Apache。 所以我会使用ProxyPassReverse等来正确翻译,但显然我不允许在.htaccess文件中使用该指令。 我真的不想把它们放到主Apacheconfiguration中,因为这意味着每当有变化时都要重新启动Apache。 这就是为什么我喜欢RewriteRole [P]:与ProxyPass不同,它可以放入.htaccess。 我能做什么来模拟.htaccess文件中的ProxyPassReverse? 或者更具体地说,不需要重新启动任何改变?

从Apache 2.0迁移到2.2

我们将最终将我们的Apache 2.0迁移到Apache 2.2。 我只是担心2.2可能已经得到的mod_rewrite更改。 切换时有没有人注意到任何问题? 任何与重写的特定问题? 现在的行为有什么不同?

奇怪的行为与RewriteRule标志?

我有一个画廊与图片。 如果有人链接我的画廊图片从其他地方(远程服务器),应该显示一个福步图片。 这基本上可行,但现在我认识到我的重写规则奇怪的行为。 这是规则: RewriteEngine on RewriteCond %{HTTP_REFERER} !^$ RewriteCond %{HTTP_REFERER} !^http://www.mydomain.net/pictures/.*$ [NC] RewriteRule .*\.(png|PNG)$ http://www.mydomain.net/pics/linkingpicsforbitten.png [R,L] 到底发生了什么:画廊由shtml页面组成,它将图片与相关path相链接,我可以前后浏览图片。 这工作,每张图片都显示出来。 当我在邪恶的远程服务器上调用页面时,链接一个图片的远程服务器,远程服务器得到了想要的效果,但是现在发生了一些奇怪的事情:回到我自己的服务器上,当我浏览图片画廊到被邪恶的远程服务器调用的图片,我突然也得到了那里的固定图片,甚至在我的画廊。 当我打F5重新加载画廊,图片再次工作。 但这是不可接受的。 我能做什么? 我试图改变和结合或离开RewriteRule的标志,但没有任何帮助。 唯一可以接受的解决scheme是设置[F]标志。 在这种情况下,邪恶的远程服务器不会看到被禁止的图像,而是一个空白页面,但至less我的画廊每次工作。 但是我宁愿要让这个被形象化的图像工作。 有任何想法吗?

需要启用与WHM的CentOS服务器mod_rewrite

我有安装了WHM的CentOS VPS。 我似乎无法在httpd.conf中configurationmod_rewrite。 有人能指出我正确的方向吗? 的phpinfo: http://www.winwebsolutionz.com/blog/phpinfo.php

closures302redirect并自动redirect

我正在我的本地主机上使用curltestingredirect。 当我运行这个命令时: $curl "test.test.com/landing/0192" 我得到这个输出: <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> <html><head> <title>302 Found</title> </head><body> <h1>Found</h1> <p>The document has moved <a href="http://redirect.redirect.com/landing?xid=0192&amp;tt=192">here</a>.</p> <hr> <address>Apache/2.2.17 (Fedora) Server at spencervm.adverplex.com Port 80</address> </body></html> 现在,如果我运行http://redirect.redirect.com/landing?xid=0192&amp;tt=192"我到达了我想要的目的地,所以基本上我想要做的就是closures302错误并redirect到它的页面应该redirect到。

如果在文件夹中存在文件,如何从根重写URI?

我在文档根目录中有一个公用文件夹。 我想redirect所有文件根目录中不存在,但在公用文件夹中存在的文件。 (因此,如果同一个文件在两个地方,则不在公共的文件将首先被提供。) 我怎样才能做到这一点 ? 以下不起作用: RewriteCond %{DOCUMENT_ROOT}/public/%{REQUEST_URI} -f¬ RewriteRule ^(.*)$ public/$1 [QSA, PT, L]

mod_rewriteredirect站点根目录和子目录从HTTP到SSL

好的,所以我在同一个webroot中有两个站点 – 主站点(在根目录中)和子目录中不相关的一堆文件。 我们希望这两个网站都能在SSL下强制渲染。 目前,我的httpd.conf的相关块如下所示: <Directory "/var/www/html"> <IfModule mod_rewrite.c> RewriteEngine on <IfModule mod_ssl.c> RewriteCond %{HTTPS} !=on RewriteRule ^subdir(.*)$ https://%{HTTP_HOST}/subdir$1 [R=301,L] RewriteCond %{HTTPS} !=on RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L] </IfModule> </IfModule> </Directory> <Directory "/var/www/html/subdir"> <IfModule mod_rewrite.c> RewriteEngine on <IfModule mod_ssl.c> RewriteCond %{HTTPS} !=on RewriteRule ^subdir(.*)$ https://%{HTTP_HOST}/subdir$1 [R=301,L] RewriteCond %{HTTPS} !=on RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L] </IfModule> </IfModule> </Directory> […]