我有一个LAMP堆栈。 我正在使用下面的.htaccess文件来自动将请求映射到.php文件: RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^([^\.]+)$ $1.php [NC,L] 所以如果我浏览http://example.com/asdf,“asdf.php ”文件将被加载。 但是,如果我创build一个名称相同的.css文件(即“asdf.css”),那么服务器在浏览到没有扩展名的名称时返回css文件而不是PHP文件。 也似乎发生的.txt文件扩展名,可能是任何其他三个字符的扩展名(虽然不会发生.js文件)。 我不明白为什么会这样。 我对重写规则集的理解是这样的:1)如果被请求的文件不存在THEN 2)如果文件名不包含句点,则将请求redirect到[filename] .php 这怎么能返回一个.txt或.css文件,特别是当匹配的.php文件存在时? 我在这里错过了什么? 谢谢!
我们即将把一个网站移动到一台运行新软件的新服务器,通常是一个简单的改变,但我们也有一个荷兰版本的网站运行在一个文件夹/ nl。 我们希望将域名www.example.com转移到指向新的服务器,但是对/ nl和其中的任何请求将被转移到dutch.example.com。 这是我们迄今为止。 ProxyRequests Off <Proxy *> Order deny,allow Allow from all </Proxy> ProxyPass /nl http://dutch.example.com/nl ProxyPassReverse /nl http://dutch.example.com/nl 由于荷兰网站的图像与当前英国网站的图像混在一起,这些图像将不再存在于新网站上,因此变得更加复杂。 所以我们还需要代理处理任何资产请求。 最重要的是,它是一个电子商务网站,因此所有这一切都有可能发生在SSL上。 这可能吗? 非常感激你的帮助
我有这样的直接结构: – www – folder1 – folder2 – folder21 – folder22 – folder23 我允许所有的图像文件被访问 <FilesMatch \.(?i:gif|jpe?g|png)$> Order Deny,Allow Allow from all </FilesMatch> 我允许访问某个文件夹中的所有文件 <FilesMatch /folder2/folder22/.*> Order Deny,Allow Allow from all </FilesMatch> 我允许访问所有robots.txt文件 <FilesMatch (robots\.txt)$> Order Deny,Allow Allow from all </FilesMatch> 最后我加了密码限制 AuthType Basic AuthName "Personal use" AuthUserFile /full/path/to/.htpasswd Require valid-user 但是当我尝试通过浏览器访问任何图像文件时,我得到密码提示。 任何人都可以解释如何解决这个问题,可能是什么问题。 谢谢。
鉴于这个文件夹/文件结构: private/.htpasswd public/.htaccess …其中public是Apache中虚拟主机的根文件夹, private是它的兄弟文件夹: 如何在.htaccess文件中定义AuthUserFile的相对path,以便能够访问/private/.htpasswd 我试过了: AuthType Basic AuthUserFile ../private/.htpasswd require valid-user 但是这不起作用,因为它试图find相对于ServerRoot的文件,而不是相对于虚拟主机的根。 我将无法访问生产服务器上的configuration文件(共享主机),我不想定义绝对path,因为我的testing和生产文件系统结构不匹配。 鉴于这些条件,是否还有可能实现我想要的?
通过练习,我为我的生产服务器部署301redirect非www – > www。 但是我的开发服务器和生产服务器之间的.htaccess重写设置有点烦人的问题。 如果我把.htaccess文件中的非www – > www 301redirect条件留下(这个文件会和网站一起部署),我的开发networking服务器会尝试将“ http:// localhost / mysite ”redirect到“ http://www.localhost / mysite “不起作用。 所以我必须根据服务器切换.htaccess重写条件,这有点麻烦。 有什么方法使用条件语句来实现像… # Rewrite "www.domain.com -> domain.com" <IfModule mod_rewrite.c> <If !localhost> #This is not valid code RewriteCond %{HTTPS} !=on RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC] RewriteRule ^(.*)$ http://%1/$1 [R=301,L] <else> RewriteCond %{HTTPS} !=on RewriteCond %{HTTP_HOST} !^www\..+$ [NC] RewriteCond […]
截至目前,我使用此规则(在example.com的.htaccess中)将HTTPS / HTTP example.comredirect到newdomain.com: Options +FollowSymLinks RewriteEngine on RewriteRule (.*) http://newdomain.com/$1 [R=301,L] 从search中,我发现以下规则将HTTPSredirect到HTTP: RewriteEngine On RewriteCond %{HTTPS} on RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI} 如何合并这些,以便 – https://example.comredirect到http://example.com ,然后http://example.comredirect到http://newdomain.com 。 我无法解释为什么我不要求这样的事情 – HTTPS /redirect到http://newdomain.com 。 总之,我已经search和问,并build议的规则不起作用,可能因为我使用自签名的证书,并为这两个域相同的证书(example.com是一个插件域,newdomain.com是主要的领域)。 请指教,如果这是有道理的。
我有一个运行在Linux机器上的Apache服务器(比如example.com)。 在web根目录下有一个文件夹( http://example.com/docs/ ,本地/home/me/docs ),它的子目录自动生成索引,通过.htaccess启用: Options +Indexes IndexOptions FancyIndexing NameWidth=* FoldersFirst IgnoreCase SuppressDescription Charset=UTF-8 SuppressHTMLPreamble 现在, docs里面是docs/protected 。 这个子目录有它自己的.htaccess : AuthType "Basic" AuthBasicProvider file AuthUserFile /path/to/.htpasswd #Require valid-user 现在,这是它变得怪异的地方(对我来说): 就像在注释行中一样, protected的不受密码保护(这是正常的),并且在其父母的列表中可见(也是预期的) 如果我取消注释Require valid-user ,那么protected成为密码保护(如果我直接键入URL),但是它也不会再出现在其父列表中。 任何人都可以弄清楚是什么原因造成的? 编辑:现在我注意到,如果我input受保护的目录的URL,然后input密码,然后返回到列表,而不closures浏览器,列表完成。 总之,目录是隐藏的,直到我给它的凭据。 但我只想保护它的内容,而不是它的存在! PS:这是在Synology盒子上运行的Apache / 2.2.21。
好的,所以我有这个包含这个.htaccess文件 <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php?p=%{REQUEST_URI}&%{QUERY_STRING} [L] </IfModule> 问题是,在Apache 2.2.22中, p和其他查询对象没有通过,但它在apache 2.4.2中效果很好。 所以基本上在Apache 2.2.22它只是将所有内容转发到index.php,但它没有任何get对象。 任何帮助,谢谢。 更新 好,所以我改变了线路 RewriteRule . /index.php?p=%{REQUEST_URI}&%{QUERY_STRING} [L] 至 RewriteRule ^(.*) /index.php?p=$1 [L,QSA]现在在Apache 2.2.22 p GET不通过,但任何具体的查询,我添加通过。 所以,如果我这样做 http://localhost/index/fun/buns/funds?man=woman 在2.4.2我得到 array (size=2) 'p' => string 'index/fun/buns/funds' (length=20) 'man' => string 'woman' (length=5) 和2.2.22我得到 […]
我有一个网站和一个子域.. 主网站托pipe在server A及其server B子域中。 main website = server A sub domain = server B 当我有高stream量,我会redirect我的主要网站到我的子域。 http://main-website.com redirects to sub.main-website.com and http://main-website.com/post1 redirects to sub.main-website.com/post1 我在主网站服务器使用htaccess来做这个redirect… 服务器A(主站点服务器,包含redirect的htaccess)每秒会有400 – 800个请求, 实际上服务器不能pipe理这些许多请求,如果我在我的网站托pipe.. 因为我只在服务器中使用htaccess文件…它会影响服务器?
我使用mod_proxy_fcgi的Apache 2.4.7的目的是通过PHP传递到PHP-FPM(这将用于共享主机环境)。 htaccess对非php文件工作正常,但是一旦它碰到通过php请求代理的重写规则,htaccess将被忽略。 我知道为什么会发生。 问题是:我如何解决它? 这个问题如何强制apache处理请求到php文件作为本地文件的请求,然后通过代理? 我花了大量时间研究这个问题,并给出了“答案”作为解决scheme: 1)“使用Apacheconfiguration,而不是.htaccess”这是有效的解决scheme,但不是共享主机环境(我不打算给共享托pipe客户访问Apacheconfiguration))。 2)“不要使用.htaccess,因为它有性能/安全/其他问题”,那么共享托pipe客户将如何控制其网站上的访问/url重写? 除此之外,如果.htaccess不是一个要求,我会简单地使用nginx。 3)“把代理里面的重写规则” – 这是不正确的,它不起作用。 这种行为似乎不是一个错误,而是一个“function”,根据https://issues.apache.org/bugzilla/show_bug.cgi?id=54887