2011-11-29 98 views
1

编辑文件匹配:得到它的工作,这里的最终版本国防部重写子目录中的

RewriteCond $1 ^(.*?)/(.*)$ 
RewriteCond apps/%1/content/%2 -F 
RewriteRule (.*) apps/%1/content/%2 [QSA,last] 

编辑:底部

我有这个原来的问题接近工作,这是在我的mod_rewrite规则

RewriteCond $1 ^(.*?)/(.*)$ 
RewriteCond %{DOCUMENT_ROOT}/johnsmith/apps/%1/content/%2 -f 
RewriteRule (.*) apps/%1/content/%2 [QSA,last] 

这将正确路线

http://host/johnsmith/blog/css/style.css 

请求

/docroot/johnsmith/apps/blog/content/css/style.css 

但是,我需要硬编码到JohnSmith对下JohnSmith对.htaccess文件。是否有可能使用相对路径,如果没有,是否有可用的变量,所以我知道当前的.htaccess目录?

下面

原来的问题比方说,我有/文档根目录的文档根 我有一个CSS文件位于此处将Apache Web应用程序:

/docroot/johnsmith/apps/blog/content/css/style.css 

我想要检索与此文件请求

http://host/johnsmith/blog/css/style.css 

.htaccess文件必须位于johnsmith文件夹中。以下规则集导致无限重定向循环

RewriteCond ^(.*?)/(.*)$ apps/$1/content/$2 -f 
RewriteRule ^(.*?)/(.*)$ apps/$1/content/$2 [QSA,last] 

如果我改变它咯,除暴安良的条件,我可以去一个页面是一个简单的PHP脚本打印出来的查询字符串,这表明

RewriteRule ^(.*?)/(.*)$ showquerystring.php?path=apps/$1/content/$2 [QSA,last] 

path等于apps/blog/content/css/style.css,这正是我所期望的。

有谁能告诉我我错过了什么吗?

此外,johnsmith文件夹可以命名为任何内容,并且johnsmith中的.htaccess文件不应该硬编码johnsmith。

更简洁地说,我要问的是:

是否有可用的一个变量mod_rewrite的,这将等于/blog/css/style.css

回答

0
RewriteCond $1 ^(.*?)/(.*)$ 
RewriteCond apps/%1/content/%2 -F 
RewriteRule (.*) apps/%1/content/%2 [QSA,last] 
0

的问题是/johnsmith/blog/css/style.css重定向到/johnsmith/apps/blog/content/css/style.css其重定向到/johnsmith/apps/apps/content/blog/content/css/style.css等等。这是因为apache会用重写的url重复重写过程。

另外我不确定RewriteCond规则是否正确。

所以这是我认为它应该是:

RewriteRule ^apps/ - [L] 
RewriteCond %{DOCUMENT_ROOT}/apps/$1/content/$2 -f 
RewriteRule ^(.*?)/(.*)$ apps/$1/content/$2 [QSA,L] 
+0

%{DOCUMENT_ROOT} /应用/ $ 1 /内容/ $ 2将不能工作,因为文档根目录为/文档根目录,以便Apache将在/ docroot/apps /中查找。 。 。当文件实际上在/ docroot/johnsmith/apps /中时。 。 。 – Dave

+0

另外,如果它有效地匹配文件,它将不会无限循环。 – Dave