Articles of mod rewrite

在没有HTTPS的情况下访问启用了SSL的站点时,Apache会发送纯文本响应

我从来没有遇到过这样的事情。 我试图简单地redirect页面到HTTPS版本,如果它确定HTTPSclosures,而是显示一个HTML页面,而不是实际redirect; 甚至更奇怪,它显示为文本/平原! VirtualHost声明(sorting): ServerAdmin [email protected] DocumentRoot "/path/to/files" ServerName example.com SSLEngine On SSLCertificateFile /etc/ssh/certify/example.com.crt SSLCertificateKeyFile /etc/ssh/certify/example.com.key SSLCertificateChainFile /etc/ssh/certify/sub.class1.server.ca.pem <Directory "/path/to/files/"> AllowOverride All Options +FollowSymLinks DirectoryIndex index.php Order allow,deny Allow from all </Directory> RewriteEngine On RewriteCond %{HTTPS} off RewriteRule .* https://example.com:6161 [R=301] 页面输出: <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> <html><head> <title>301 Moved Permanently</title> </head><body> <h1>Moved Permanently</h1> […]

Apache 2.4与PHP-FPM .htaccessredirect

我在服务器上用PHP-FPM设置了Apache 2.4。 从Apache传递到PHP-FPM我使用以下内容: ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9001/hosting_files/site.com/admin_secure/$1 “admin_secure”是虚拟主机中的DocumentRoot。 在该目录中,我有一个包含以下内容的.htaccess文件: <IfModule mod_rewrite.c> RewriteEngine on RewriteRule ^$ webroot/ [L] RewriteRule (.*) webroot/$1 [L] </IfModule> 该网站的工作,直到我试图访问应该在webroot目录中的东西。 例如,如果我访问位于webroot目录内的vendors/kcfinder/browse.php ,则会出现“文件未find”错误。 如果我去webroot/vendors/kcfinder/browse.php ,它的工作原理。 我已经打开了重写和代理日志logging,看起来重写从来没有发生。 它只是发送任何我input的URL(如果它是一个PHP文件)。 有没有办法写我的ProxyPassMatch语句,以重写这样的?

mod_cache不工作

我有一个PHP网站,有很多dynamic生成的网页。 我试图转向mod_cache来帮助提升性能,因为在大多数情况下,内容在特定的一天不会改变。 我已经尽可能地configuration了mod_cache,下面的例子是web上的例子,包括apache.org上的mod_cache页面 。 当我设置LogLevel debug ,我看到有关caching的一些信息[不]发生。 有很多这样的线对: [Fri Jun 01 17:28:18 2012] [debug] mod_cache.c(141): Adding CACHE_SAVE filter for /foo/bar [Fri Jun 01 17:28:18 2012] [debug] mod_cache.c(148): Adding CACHE_REMOVE_URL filter for /foo/bar 这很好,因为我设置了CacheEnable disk /foo ,表示我希望在/ foocaching下的所有内容。 我是mod_cache的新手,但是我对这些行的理解是,它只是意味着mod_cache已经确认URL应该被caching,但是应该有更多的行表示它将数据保存到caching中,然后稍后在相同的URL上随后检索它们。 不pipe是用F5刷新还是不用,或者用不同的浏览器,或者不同的电脑,我都可以打到相同的URL。 总是在日志中显示的那对线,而不是别的。 当我设置CacheEnable disk / ,我看到更多的活动。 但我不想caching整个站点,并且网站有很多不同的子path,所以我不想修改代码来在所有必要的地方设置no-cache头。 我会提到mod_rewrite在这里被使用,把/ foo / bar改写成类似于index.php?baz=/foo/bar ,但是我的理解是mod_cache使用了重写前的URL,而不是重写后的URL。 据我所知,我有响应标题没有得到caching的方式。 以下是一个例子: Cache-Control:must-revalidate, max-age=3600 Connection:Keep-Alive […]

如何最小化恶作剧,持久的POST请求的影响

几个月来 ,我们共享的托pipe服务器之一,一直持续不断地受到来自必须成千上万个IP的“POST /”请求的打击。 在很多情况下,这已经使服务器不堪重负,导致拒绝服务中断。 目标领域是很无聊(小地产代理),所以虽然这似乎是恶意的,我不明白这个长期和99%的不成功的攻击的动机。 一个典型的请求(取自TCPDUMP)看起来像这样: POST / HTTP/1.1 Accept: */* Accept-Language: en-us Content-Type: application/octet-stream Content-Length: 570 User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) Host: xxx.co.uk Connection: Keep-Alive Cache-Control: no-cache 2+cIPSyYVJFqB9xPFzWoLj9seNyEKIcuIJz/yfkc9tVP+orXgjDk8ywglufcXsMz bVP4XLcowz/fQtsn2kceQEj/EaEWx/GEbcC3eTbCbTube0suAfEGje3qISKQJ+ka HaChqun3whii3OTh7vCayGV72lh4raLRandKC5g/73wgQ9Jzh2OLIzNvsiEMSJco yG+4i35XJMvX7ovx8qJkyByHUIeE5G5M2Kp97O4sOT4jTAK2y/KAMjf6oFgtAJhI K4/HdcnyfNdI3/4RJXlrSfhUQAc+qhGMEL7AZdtzgRub7lnu+hbuPGZvS3rF1MvL WK1q4mrnZr0Q3m0bWkzsMZCndQ7fqOBafchjprhn4JKPsjO+upRm2m+irvmJjqnl sDiR3fnD6pzbWyLTm2qonMJPCll3p6zg06gEfIaW04t9r89/PdHgz8AU8nzO4BX8 qwTG6dSjgbowHyJQmud8Ro+ZT+gHfw/YQUrBqKm7RoFmfJzUoOCKaP1LTwHfI1Gc E+L8bwQV6ztKBwVn2NqbE83SAXYr9E0QkpaxGg== 我们还没有能够确定POST请求中的内容,因为它看起来像垃圾,但我不确定它的相关性。 这不是base64编码。 为了减less响应这个请求的带宽量,我们禁止在Apache2configuration中使用POST请求: <Location /> <Limit POST> Order deny,allow Deny from all </Limit> </Location> […]

如何从现有SSL环境variables创build自定义标题?

好吧,我已经花了整整一天的时间 我正在使用mod_ssl的Apache我试图采取一个现有的环境头,“%{SSL_CLIENT_S_DN_CN} s”,它看起来像“姓氏名Mi用户名”,并设置一个名为USERNAME的新标题,并设置等于只是用户名最后一个空格和string结尾之间的字符) 然后,我会反向代理该头到后端主机,将使用它来识别用户。 我尝试了很多不同的东西。 我不知道如果问题是我不明白Perl的正则expression式,或者如果我不明白的语法,或者我不把它放在正确的地方,或所有三个。 这是我尝试的一个例子: SetEnvIf SSL_CLIENT_S_DN_CN (.*\ )(.*) newhostname=$2 RequestHeader set HOSTNAME "%{newhostname}e" 我真正想要的是一个新的标题主机名等于DN_CN环境variables中的最后一个非空白字符。

404存在的文件错误?

脚本向我的URL发出GET请求,如下所示: http://mydomain.com/cgi-bin/uu_ini_status_audios.pl?tmp_sid=b742be1d131c4d32237a9f1fcdca659e&rnd_id=0.2363453360320319 不过,我立刻得到了一个404回来: The requested URL /cgi-bin/uu_ini_status_audios.pl was not found on this server. 但是这个脚本存在于我的服务器上,我可以看到这个文件! 它有正确的权限(我给了它777肯定)。 它也由我的apache用户和它在组apache中拥有。 我在想什么? 感谢您的帮助! 更新 我认为这将是一个htaccess(重写),但我不认为它已经是了。 我试图把一个index.php文件放在那里,并尝试通过我的URL访问它,但我甚至不能这样做! 我试过这个: http://mydoamin.com/cgi-bin/index.php – 相同的404错误! 我在myerror日志中得到这个: [Tue Sep 14 14:42:49 2010] [error] [client xx.xxx.xx.xxx] script not found or unable to stat: /var/www/vhosts/mydomain.com/cgi-bin Access_log文件: xx.xxx.xx.xxx – [14 / Sep / 2010:14:48:25 +0200]“GET /cgi-bin/index.php HTTP / 1.1”404 […]

在Apache中,.htaccess文件覆盖mod_rewrites的httpd.conf文件吗?

在我的Apache httpd.conf文件中,我在VirtualHost标签中有这个声明。 RewriteEngine On RewriteCond %{HTTP_HOST} !^www.shanestillwell.com$ [NC] RewriteRule ^(.*)$ http://www.shanestillwell.com/$1 [L,R=301] 而这个在我的.htaccess RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_URI} !=/favicon.ico RewriteRule ^(.*)$ index.php?q=$1 [L,QSA] 我的httpd.conf的规则似乎被忽略。 .htaccess的规则是否清除了httpd.conf重写规则?

apache2 – 如何从重写规则中排除别名?

我已经在Debian上的Apache2上设置了mod_rewrite和mod_alias(在testing服务器上)。 我在/etc/apache2/sites-available/default有以下重写代码: <Directory /> Options FollowSymLinks AllowOverride All RewriteEngine on RewriteCond %{REQUEST_URI} !\.(php|html|css|js|gif|png|jpe?g)$ RewriteRule (.*)$ /index.php [L] </Directory> 我有以下别名代码,默认情况下从phpmyadmin软件包(通过apt-get install phpmyadmin加载,位于/etc/apache2/conf.d/phpmyadmin.conf )进行设置: Alias /phpmyadmin /usr/share/phpmyadmin 每次我加载http://my.test.server/phpmyadmin ,它转到http://my.test.server/index.php而不是别名(被绕过/忽略?)。 如何设置排除规则以允许别名通过(即使别名是在不同的文件中设置的)?

我需要重写https://domain.com => https://www.domain.com,因为通配符SSL

喜欢这个话题说我需要重写https://domain.com => https://www.domain.com 。 但我有一个域的通配符SSL设置和根域不匹配* .domain.com,因此浏览器提出了一个错误 domain.com使用无效的安全证书。 该证书仅对* .domain.com有效 这是我目前的虚拟主机configuration <VirtualHost 127.0.0.1:443> ServerAdmin [email protected] DocumentRoot /usr/local/app/domain/webapps/www JkMount /* somestuff ServerName domain. com ServerAlias www.domain.com ErrorLog logs/domain.com-error_log CustomLog logs/domain.com-access_log combined Customlog logs/domain.com-deflate_log deflate RewriteEngine on RewriteCond %{HTTP_HOST} ^domain\.com [NC] RewriteRule ^/?(.*) https://www.domain.com/$1 [L,R,NE] SSLEngine on SSLCertificateFile /etc/httpd/conf/ssl.crt/x.domain.com.crt SSLCertificateKeyFile /etc/httpd/conf/ssl.key/x.domain.com.key </VirtualHost> 我希望RewriteEngine会在加载SSL之前启动,但不起作用。 这是否可以解决而没有得到一个新的只是根域的证书?

从一个TLDredirect到另一个TLD

我有一个网站(我们使用Apache), example.com和example.org两个域名。 网站响应这两个通配符子域。 但是,我希望将.com作为规范的域名。 由此,我的意思是,我想redirect(301)一切到.com,但保持子域。 例如。 example.org => example.com sub.example.org => sub.example.com 我不太了解正则expression式来解决这个问题。 任何人都可以指向正确的方向吗?