我正在尝试为即将到来的Chrome“非安全显示”v56版本做准备。 我运行一个网站服务: example.com 我给每个客户一个子域的服务: cust1.example.com , cust2.example.com等 几年前,我将服务configuration为接受www.cust1.example.com , www.cust2.example.com等。主要是因为客户总是将“www”添加到所有内容的前面。 我想确保他们得到他们的网站,而不是一个“无效域”的消息。 我购买了通配符SSL证书*.example.com来覆盖客户网站。 显然,这不适用于www.cust1.example.com等。我的大多数客户没有使用HTTPS,所以这不成问题。 现在的浏览器现在迫使https成为一个问题。 我已经尝试使用mod_rewrite来解决这个问题。 RewriteCond %{HTTP_HOST} ^www\.([^\.]+)\.example\.com$ [NC] RewriteCond %{SERVER_PORT} =443 RewriteRule ^(.*)$ https://%1.example.com/$1 [R=302,E=nocache:1,L] 注意:在testing解决scheme时,我使用了302,所以我不会无意中将redirect推入浏览器的caching,并且不能再次更改。 问题是,当您在浏览器中使用HTTPS启动时,从服务器提供的redirect仍然会触发ERR_CERT_COMMON_NAME_INVALID错误,然后才能redirect以删除“www”并转到具有有效证书的页面。 如何在不触发浏览器的不安全响应的情况下删除HTTPSstream量上的“www”前缀?
起初,这个规则是有效的: DirectoryIndex index.php ErrorDocument 403 /form.html RewriteCond %{REQUEST_URI} ^/index\.php$ RewriteCond %{REQUEST_METHOD} !POST RewriteRule . – [F,L] 这意味着http://example.com和http://example.com/index.php只能通过POST打开。 现在的问题 我添加了这个额外的规则集: RewriteCond %{REQUEST_URI} !^/index\.php$ RewriteRule . – [F,L] 现在,我再次发送POST到http://example.com但收到此错误: Forbidden You don't have permission to access / on this server. Additionally, a 500 Internal Server Error error was encountered while trying to use an ErrorDocument to handle […]
我在我的Webfaction网站上安装了Nextcloud,并且希望删除URL中的“ index.php ”。 我遵循这里的指示 ,但后来意识到它说: 此外,这些说明仅在将Apache与Apache的mod_php模块一起使用时才起作用。 其他模块,如php-fpm或mod_fastcgi不受支持。 看起来我的主机使用Apache和fastcgi。 但是,干净的URL可以工作 – 而不是https://example.com/index.php/apps/files/ ,我可以去https://example.com/apps/files/并获得正确的页面。 但是Nextcloud只是在我导航时插入“ index.php ”。 确切地说,303发送到长URL的redirect。 此外, 这个论坛条目build议它可以使用php7和fastcgi。 我怎样才能停止插入? 如果需要的话,我可以编辑代码,但是我的PHP使用经验来自于mysql_* API的时间,在课前,所以我很难find我的方式:-)也许有人在这里已经知道这个问题的一个快速解决。
我正在从旧的Debian 6服务器迁移到一个漂亮的新的Ubuntu 16.04服务器。 在我们的Debian服务器上,我们有主域,但也有几个子域(每个都有.conf文件),比如: http://www.example.com http://dev.example.com http://db.example.com 在新服务器上,因为我们还没有一个指向IP地址的域名,但是我们必须testing迁移的网站,所以我使用了下面的.conf文件: <VirtualHost *:80> ServerAdmin [email protected] Alias /prod /var/www/example.com/web Alias /dev /var/www/dev.example.com/web Alias /db /var/www/db.example.com/public_html DirectoryIndex index.php </VirtualHost> 所以,如果我想在每个环境中进入主页,我使用这些URL: http://11.22.33.44/prod/ http://11.22.33.44/dev/ http://11.22.33.44/db/ 现在,在开发网站,我有漂亮的URLredirect规则,如: RewriteRule ^pretty-url /path/to/content [L,R=301] 问题是,如果我导航到http://11.22.33.44/dev/pretty-url ,它会将我redirect到http://11.22.33.44/path/to/content , 而不是 http://11.22.33.44/dev/path/to/content 。 鉴于我不能使用一个指令,如ServerName dev.11.22.33.44或ServerName 11.22.33.44/dev ,我不想改变Web目录中的.htaccess文件 – 我的.conf文件应该是什么样子允许IP地址上有多个“站点”,每个站点映射到一个子目录,并正确地重写到该子目录?
我试图阻止引用垃圾邮件到我运行的一些网站。 然后我在日志文件中遇到了很多这样的行。 \xd1\x81\xd1\x82\xd1\x80\xd0\xbe\xd0\xb9\xd0\xba\xd0\xb0.kz 目前,我正在使用我的.htaccess文件中的以下行保持引荐来源垃圾邮件不出现在客户的AWStats报告中。 RewriteCond %{HTTP_REFERER} ^http(s)?:\/\/([^.]+\.)*domain\.com\/ 这似乎工作正常,但我似乎有编码的URL的问题。 如果我将URL解码为стройка.kz那么我可以使用它作为条件吗?
您可以为apache制定一个全面的重写规则,它的行为有点像一个别名,但可以在.htaccess文件中实现,而别名不能。 举个例子,假设你的文档根是这样的层次结构: /.htaccess /test/ /test/.htaccess /test/file 您可以通过使根.htaccess包含以下命令来“testing”到testing文件夹的所有请求: RewriteEngine On RewriteRule ^(.*)$ /test/$1 [L] 而第二个.htaccess包含: RewriteEngine On 这很好,通常是你所需要的。 它只是有一个问题 – 它创build了多个有效的url。 现在你可以用/file和/test/file来访问这个/test/file 。 通常这不是问题,但如果添加一个名为/test/test的文件,将会看到问题,因为假别名完全停止工作。 如果子文件夹有一个复杂的.htaccess它自己可能会导致重大的麻烦。 有没有办法假冒一个.htaccess别名没有原来的url仍然工作? (任何RewriteCond的子文件夹,将检查,如果我们已经被重写或不?
这是我的目标: /any-directory-or-subdirectory应显示/any-directory-or-subdirectory/index.html的内容 /any-directory-or-subdirectory/应该redirect到/any-directory-or-subdirectory (没有结尾的斜杠) /any-directory-or-subdirectory/index.html应该redirect到/any-directory-or-subdirectory /any-directory-or-subdirectory/something.htm我应该显示自己的内容。 我有这个工作在一个特定的目录完美: DirectorySlash Off RewriteEngine on RewriteRule ^specific-dir$ /specific-dir/index.html [L,E=LOOP:1] RewriteCond %{ENV:REDIRECT_LOOP} !1 RewriteRule ^specific-dir/$ /specific-dir [R=301,L] RewriteCond %{ENV:REDIRECT_LOOP} !1 RewriteRule ^specific-dir/index.html$ /specific-dir [R=301,L] 我需要这个工作在所有的子目录,而不是一个特定的,也为同样的function在网站的根源。 我已经尝试了很多东西来适应这个代码的工作,但迄今为止还没有任何运气。
我已经在Apache代理相互SSL上configuration了 SSLVerifyClient require SSLVerifyDepth 3 configuration和通信正如预期的那样工作。 现在我想从客户端证书中的Apache代理发送到主题DN中的通用名称字段的后端信息。 CN字段具有CN=[HexString1]-[HexString2] fromat。 我想要做的是: RequestHeader set HexString1 %{SSL_CLIENT_S_DN_CN_HexString1} RequestHeader set HexString2 %{SSL_CLIENT_S_DN_CN_HexString2} 我正在研究mod_rewrite,但它似乎并没有帮助我分裂CN来实现我的目标。 有没有办法如何在Apache代理中configuration它?
我有一个RewriteRule重写包含文件版本的文件的任何请求没有版本: RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.+)\.[0-9a-f]{32}(\.[0-9a-z]{2,6})$ $1$2 [L] 这意味着只要文件styles.<version-id>.css被请求,就会被重写为styles.css 。 现在,如果要求文件的版本化版本,我怎样才能设置caching头文件,以便文件被caching更长的时间? 换句话说,如果文件styles.css被重新定义,它应该被caching24小时,而文件styles.<version-id>.css应该被caching365天。 我已经尝试使用此代码片段重写之前和之后使用FilesMatch设置caching: <FilesMatch ".+\.[0-9a-f]{32}\.[0-9a-z]{2,6}"> Header set Cache-Control "max-age=31536000, public" </FilesMatch> 但它不起作用。 也许它不匹配,因为文件名被重写。 我不知道。 我也尝试使用环境variables: RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.+)\.[0-9a-f]{32}(\.[0-9a-z]{2,6})$ $1$2 [L,E=AutoVersion] Header set Cache-Control "max-age=31536000, public" env=AutoVersion 但是我也无法得到这个工作。 有什么方法可以根据原始请求设置重写请求的caching策略吗?
我已经搜寻过这个答案以前是否没有快乐。 我想使用RewriteRule的模式匹配来获取请求的path,并redirect客户端保持path在最终的redirect。 我认为这样的事情会做的伎俩: RewriteRule. ^(.*)$ http://testserver/test/$1 如果用户请求foo ,发送他到test/foo (不要担心循环,我把一些RewriteCond逻辑来防止)。 令我惊讶的是,Apache结束了类似于http://testserver/foo/var/www/html 。 它做了什么是以下几点: /bar /var/www/html/bar 我提出了mod_rewrite的日志级别,发现它做了匹配,但是Apache扩展匹配/的本地path,这是/var/www/html并使用它来redirect浏览器,这将无法正常工作。 我尝试使用[PT] ,我认为这将防止扩大,但它没有。 任何想法,我怎样才能防止发生? 任何帮助,将不胜感激。