mod – 重写/ .htaccess问题与Apache 2.4.12

文件结构如下

  • 公共文件: /home/usrname/public_html
  • CGI BIN,运行软件: /home/usrname/public_html/cgi-bin
  • 私有文件: /home/usrname/public_html/_private
  • 数据库: /home/usrname/public_html/_private/data

我想要做的是将下面的代码从Apache 1.3.42转换为Apache 2.4.12 .htaccess文件,在SSLpath中看起来好像有一些变化,我主要是挂断了。

当您尝试使用SSLpath的任何文档时,我都会看到_privatepath,而不是HTML源代码中的public_htmlpath,如CSS,js图像等

我也有一个权限问题,这是要求我在SSL模式下login,这一定是由于其他.htaccess文件之一。 它应该是简单的,但不知何故我没有得到正确的联机规则。

这里是每个.htaccess文件中的代码行。

公共文件:/ home / usrname / public_html

 RewriteEngine On RewriteCond %{HTTP_HOST} ^99\.00\.99\.000$ RewriteRule ^/?(.*)$ http://www.example.com/$1 [R=301,L] RewriteCond %{HTTP_HOST} ^example.com$ RewriteRule ^/?(.*)$ http://www.example.com/$1 [R=301,L] RewriteCond /home/usrname/public_html/%{REQUEST_FILENAME} -f RewriteRule ^(.+) /home/usrname/public_html/$1 [L] RewriteCond /home/usrname/public_html/_private/%{REQUEST_FILENAME} -f RewriteRule ^(.+) /home/usrname/public_html/_private/$1 [L] RewriteRule ^(.+) - [PT] DirectoryIndex home.html index.htm index.html default.htm Default.htm Action cgi-ccd /cgi-bin/aws.emp AddHandler cgi-ccd html AddHandler default-handler .gif AddHandler default-handler .jpg <FilesMatch "\.(inx|weo|lco|dbo|cdo|fpo|dao)"> Order Allow,Deny Allow from env=local_ref </FilesMatch> <Files 403.shtml> order allow,deny allow from all </Files> 

我们也在这个帐户的各自path中有这些.htaccess文件。

私有文件:/ home / usrname / public_html / _private

 AuthUserFile .htpasswd AuthGroupFile /dev/null AuthName Administrator AuthType Basic <limit GET> require valid-user </limit> 

数据库:/ home / usrname / public_html / _private / data

 AuthUserFile .htpasswd AuthGroupFile /dev/null AuthName Administrator AuthType Basic <limit GET> require valid-user </limit> 

CGI BIN:/ home / usrname / public_html / cgi-bin

 Options +ExecCGI Order allow,deny Allow from all 

也许有什么东西,这些都一起工作,这是现在在Apache 2.4 +的问题? 也许这是从CGI-BIN目录中调用文件的权限,如果需要,我可以移动它?

301redirect相当简单,似乎。 该版本的语法可能需要更改,但它们看起来很简单,可以编程。 我认为有一些像选项FollowSymLinks SymLinksIfOwnerMatch ExecCGI包括MultiViews或其他组合的一些冲突; 我已经尝试了几个组合,没有运气。

最后,我试图做掩码软件的完整pathcgi-binpath,但提供旧的path作为301redirect,所以我们不会失去任何可能被索引或书签的链接。

.IE

 From: http://www.example.com/cgi-bin/aws.emp/any-document-file-name.html To: http://www.example.com/any-document-file-name.html 

或者在SSL模式下。

 From: https://www.example.com/cgi-bin/aws.emp/any-document-file-name.html To: https://www.example.com/any-document-file-name.html 

我发现如果将以下内容从%{REQUEST_FILENAME}更改为%{REQUEST_URI} ,至less允许所有内容都能正常工作,除非需要SSLpath,否则会显示任何文件types的_privatepath,例如css,js,images等等。

我希望我提供了足够的信息来帮助解决这个讨厌的问题,可惜我对mod_rewrites很缺乏经验,因此现在看起来有点像黑魔法。 这可能需要几周时间才能自行解决简单的事情。

任何帮助,非常感谢,我很想从Apache 1.3.42迁移,因为它的方式逾期,一旦这个问题已经解决,我可以。

我发现如果将以下内容从%{REQUEST_FILENAME}更改为%{REQUEST_URI} ,至less允许所有内容都可以正常工作

如果通过这个你指的是下面的代码块(假设在根.htaccess文件中):

 RewriteCond /home/usrname/public_html/%{REQUEST_FILENAME} -f RewriteRule ^(.+) /home/usrname/public_html/$1 [L] RewriteCond /home/usrname/public_html/_private/%{REQUEST_FILENAME} -f RewriteRule ^(.+) /home/usrname/public_html/_private/$1 [L] RewriteRule ^(.+) - [PT] 

然后,这只是有点意义。 问题是如果在.htaccess使用这些指令,也不会在Apache 1.3上工作。

“问题”是该.htaccess文件的内容看起来像是直接从服务器configuration中取出的。 在.htaccess上下文中,无论REQUEST_FILENAME是否更改为REQUEST_URI ,这些指令都不会匹配。 在服务器configuration中使用时, REQUEST_FILENAMEREQUEST_URI相同,但在.htaccess REQUEST_FILENAME是请求映射到的绝对文件系统path。 所以,在这种情况下使用REQUEST_URI只是“less错”,它仍然是不正确的。

重写为/home/usrname/public_html/... (绝对文件系统path)在.htaccess无效。 如果成功执行,这将导致400错误的请求。

但是,这些指令实际上并不像看起来在做什么。 他们只是简单地把请求重写回同一个文件 – 这没什么意义 – 所以很难看出这些指令的意图是什么? 他们是否打算阻止其他指令的运行(例如阻止请求被传递给CGI脚本)?

与某些类似选项的冲突FollowSymLinks SymLinksIfOwnerMatch ExecCGI包含多视图

你将需要使用FollowSymLinksSymLinksIfOwnerMatch设置mod_rewrite的function。 而且您可能需要禁用MultiViews