Articles of mod rewrite

Apache反向代理间歇性错误113 – 没有路由到主机

我在CentOS 4上安装了Apache 2.0.52服务器,前端安装了几个App服务器(Jetty和Tomcat的混合)。 Apache有一些像这样configuration的虚拟主机: <VirtualHost www1.example.com:443> ServerName www1.example.com DocumentRoot "/mnt/app_web/html" SSLEngine on SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP SSLCertificateFile /etc/httpd/conf/ssl.crt/server.crt SSLCertificateChainFile /etc/httpd/conf/ssl.crt/chain.crt SSLCertificateKeyFile /etc/httpd/conf/ssl.key/server.key SetEnvIf User-Agent ".*MSIE.*" nokeepalive ssl-unclean-shutdown downgrade-1.0 force-response-1.0 RewriteEngine on RewriteRule ^/app1/(.*)$ http://app1.example.com:8080/app1/$1 [P,L] RewriteRule ^/app2/(.*)$ http://app2.example.com:8080/app2/$1 [P,L] </VirtualHost> 但是,我间歇性地在日志中收到以下错误: [Fri Dec 04 07:19:41 2009] [error] (113)No route to host: proxy: HTTP: attempt to connect to […]

如何在乘客上使用apache / mod_rewrite生成规范URL?

如果她或他访问了我们的Rails应用程序,我们曾经有一个每.htaccess工作设置redirect访问者到一个规范的URL(为SEO的原因,减less双倍的内容): RewriteEngine on RewriteCond %{HTTP_HOST} !^www\.example\.com$ [NC] RewriteRule ^(.*) http://www.example.com/$1 [L,R=301] 这实质上意味着:如果浏览器指向除example.com以外的其他内容,则将其redirect到www.example.com,此设置以前可用,但现在失败。 没有错误,如果访问不存在的内容,或者访问由rails应用程序提供的URI,它就不起作用。 如果我把一个静态文件或php文件放在RAILS_ROOT / public中,然后访问那个redirect工作。 我们的导轨应用程序使用乘客部署。 .htaccess文件放在RAILS_ROOT / public中。 自更新其中一个组件后,它似乎停止工作,但我们无法确切地知道这是什么时候。 乘客模块一段时间以来一直没有更新,所以我希望从原因列表中排除。 任何线索如何解决这个问题或通过另一种方式恢复function? 使用:Gentoo Linux,Apache 2.2.11,Passenger 2.0.6 乘客升级目前不是一个真正的select,因为它修改了符号链接parsing行为。

在Ubuntu中configurationApache2中的花式URL用于状态网

我试图评估statusnet(正式laconica)部署作为我们的内部微博系统,但已经进入了一堵墙。 我有最新版本(0.8.2)安装和运行,即我可以注册为用户,发布消息等。那么,这是什么问题? 花式URL不起作用。 我按照这里的说明,一旦我添加$config['site']['fancy'] = true行到我的config.php文件我开始得到错误,当我点击远离主页,例如点击组选项卡导致URL / statusnet /组的“404未find错误”。 从config.php中删除该行将使系统返回到工作状态。 很显然,statusnet正在尝试使用“奇特的URL”,我认为apache2configuration存在问题 – 但是我在Apacheconfiguration方面有点不足。 我已经启用mod_rewrite,并使用phpinfo()方法来确认它已加载。 statusnet文件夹中有一个htaccess.sample文件,我已经重命名为.htaccess并更新了RewriteBase以读取/ statusnet /。 Apache日志不会显示除'File does not exist': /var/www/statusnet/group referer: http://localhost/statusnet之外的任何有用'File does not exist': /var/www/statusnet/group referer: http://localhost/statusnet 。 我现在已经达到了我对Apache2知识的极限(告诉你我是一个n00b)。 我已经试过了statusnet IRC,但是我们只是说'风滚草',然后离开它。 提前致谢 [编辑]sorting:我需要将“AllowOverride”参数从“无”更新为“全部”。 问题是该指令不在其他postbuild议的httpd.conf或apache2.conf中。 我终于find了/ etc / apache2 / sites-enabled / 000-default [显然我猜]。 快速重启apache,我就开始运行了。

ModRewrite:redirect除“/”之外的任何内容?

我试图做一些非常简单的事情:如果用户请求主页http://www.OurSite.com/ ,则停止所有规则并正常提供文件。 如果世界上还有其他东西被请求,那就静静地redirect到一个php脚本。 我正在使用这个: RewriteCond %{REQUEST_URI} !^/$ [NC] RewriteRule .* /000_ROUTE.php [L] 似乎我的情况正在被忽略,主页也正在redirect。 我怎样才能做这个工作?

ModRewrite:停止运行规则两次无声redirect?

考虑这个简单的规则来隐藏访客的一个丑陋的URL: RewriteRule ^/CleanPage.html$ /index.php?ugly_parameter=yuck&somevar=12 [L] 这条规则似乎是在日志中产生两套“规则运行”。 首先,它运行所有规则,直到findCleanPage.html匹配。 在这一点上,应该做的,但它做了一些愚蠢的事情:它需要复杂的url,“index.php?ugly_parameter = yuck&somevar = 12”,并开始从开始尝试匹配到另一个规则! 我怎么告诉它“index.php?ugly_parameter = yuck&somevar = 12”是我的“最终答案”,不要浪费时间去试试看看它是否与其他东西相匹配? 我以为这是“L”旗?

Apache的mod_rewrite与多个参数parsing的问题

我一直在努力获得以下重写工作 ^/agatedepot/([0-9.]+)/([0-9a-zA-Z._]+)\?doc-id=([0-9a-zA-Z._\-]+) 至 /agateDepot.php?date=$1&filename=$2&doc-id=$3 我知道mod_rewrite正在工作。 我知道它正在读取.htaccess文件,我只是没有看到任何redirect发生。 这是我的.htaccess文件 RewriteEngine On RewriteRule ^/agatedepot/([0-9.]+)/([0-9a-zA-Z._]+)\?doc-id=([0-9a-zA-Z._\-]+) /agateDepot.php?date=$1&filename=$2&doc-id=$3 任何帮助将不胜感激。 我想这是简单的,但我一直没能弄明白。 Apache错误日志中没有错误,访问日志只是简单地logging一个404。

301通过htaccess将第二个域redirect到第一个域,mod_rewrite同时保留子域 – 任何提示?

今天我一直在围绕着pipe,但鉴于我有限的mod_rewrite和正则expression知识,我正在努力。 我想要实现的是将domain1(包括子域)重写为domain2(包括子域),并将其实现为301.域2是主域,域1只是(暂时)设置并且真的就在那里,因为“是的”(一个更好的使用正在等待,我想用它来学习一些东西)。 域2configuration为通配符,并托pipe通过子域 – >子文件夹内部重写显示的微型站点。 (会很高兴地在这个请求后发布代码,这不是棘手的,但它确实需要我一段时间,没有无限重写,出于某种奇怪的原因)。 域1(临时域)根本没有设置,但仅仅是因为我面对几个选项(一个DirectAdmin实现的“别名”或“指针”,或添加为一个单独的域,configuration为通配符)。 如果有人进入域1(转发域),这应该发生: http://sub.domain1.tld -> http://sub.domain2.tld http://sub.domain1.tld/content.php -> http://sub.domain2.tld/content.php http://domain1.tld -> http://domain2.tld http://domain2.tld 什么让我烦恼的是,networking上的所有解决scheme或者将子域映射到目录,只是通过http://domain1.tld/编码来处理请求。 我自己的老办法之一,把.co.ukredirect到.com,有我想去的开始: RewriteCond %{HTTP_HOST} ^(www\.)?([^\.]+)\.foo\.com [NC] RewriteRule ^(.*)$ http://foo.co.uk/$1 [R=301,L] 我知道$1表示所有域都是由^(.*)$模式匹配的,而%2是子域(所以我假设%1将会是“www。”,如果它存在于http_referer中,或者否则为空?) …但是,这是我卡住的地方。 重写最新的方式是将任何variables传递给一个新的域名,而不是丢失任何子域名?

Apache mod_rewrite规则顺序混乱

我正在尝试设置一些简单的规则,根据path和查询string的位来重写旧版网站的URL。 首先,看起来像这样: RewriteEngine on RewriteMap freeitems txt:/www/www.example.com/etc/freeitems_map.txt RewriteMap items txt:/www/www.example.com/etc/items_map.txt RewriteCond %{QUERY_STRING} ^sku=(\d+)$ RewriteRule ^/free_item.php$ https://www.example.com/shop/detail/${freeitems:%1}? RewriteRule ^/item.php$ https://www.example.com/shop/detail/${items:%1}? 对于/free_item.phpurl来说,这似乎很好,正确地从RewriteMap取代了结果,但是/item.php只返回了redirect的URL的第一部分,而没有从RewriteMap查找中得到结果。 如果我颠倒了规则的顺序,失败/正在运行的URL就会颠倒过来。 正如我一直理解RewriteRule语法,如果URLpath不匹配模式,规则将被跳过,处理移动到下一个。 在这种情况下, 我最终设法通过将其分解成两个块来实现它的工作: RewriteEngine on RewriteMap freeitems txt:/www/www.example.com/etc/freeitems_map.txt RewriteMap items txt:/www/www.example.com/etc/items_map.txt RewriteCond %{QUERY_STRING} ^sku=(\d+)$ RewriteRule ^/free_item.php$ https://www.example.com/shop/detail/${freeitems:%1}? RewriteCond %{QUERY_STRING} ^sku=(\d+)$ RewriteRule ^/item.php$ https://www.example.com/shop/detail/${items:%1}? 任何人都可以启发我为什么第一种技术失败? 编辑:作为一个testing,我添加了第二个RewriteRuleredirect的URL的附加path元素。 当我请求一个应该匹配第二个规则而不是第一个的URL时,该path元素将按预期显示。 只是不是RewriteMap查找的结果。 谢谢! -ben

用于REST API请求的SSL ProxyPass

生产服务器使用大量的AJAX调用,与REST API服务器位于不同的域,所以ProxyPass已成功用于httpd.conf以启用通信。 现在需要添加安全的login到网站。 已经获得并安装了SSL证书,并且对主站点工作正常,但是任何API调用都失败。 ProxyPass指令的forms如下: ProxyPass /58080/ http://(api server) ProxyPassReverse /58080/ http://(api server) 所以API调用是“ http://(production server)/ 58080 / api / endpoint” 看起来好像httpd.conf不是放置httpsredirect的地方。 在ssl.conf中使用这样的东西是否有效? ProxyPass /68080/ http://(api server) ProxyPassReverse /68080/ http://(api server) 或者,API服务器是否也需要能够响应https呼叫呢? 现在,它不能。 如果不行的话,这是否会打败正在努力实现的整个目标 – 这是不安全的? 感谢您的任何build议, 标记…

.htaccess重写规则问题

在提出问题之前让我告诉你一些假设这里有5个文件在我的web服务器上index.php config.php read.php write.php .htaccess 我在.htaccess中写了下面的URL重写规则 在RewriteRule上RewriteEngine ^(\ w +)$ read.php?id = $ 1 现在,当我键入domain.com/xyz它从read.php?id = xyz获取数据那很好:) 但是,当我键入domain.com/index它从index.php获取数据,或者当我键入domain.com/write或domain.com/config或domain.com/read它从write.php,config.php和读取数据.php分别 我希望数据从read.php?id = index或read.php?id = config或read.php?id = read或read.php?id = write 任何人都可以帮助我呢? 对不起,我英文很差