编辑:搞定了,这是最终版
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的当前目录?
以下原始问题
假设我有一个带有/ docroot docroot的Apache Web应用程序 我在这里有一个css文件:
/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]
路径等于apps / blog / content / css / style.css,这正是我所期望的。
谁能告诉我我错过了什么?
此外,johnsmith文件夹可以命名为任何东西,johnsmith中的.htaccess文件不应该硬编码johnsmith。
更简洁,我想问的是:
是否有可用于mod_rewrite的变量,它等于/blog/css/style.css
答案 0 :(得分:0)
问题是/johnsmith/blog/css/style.css
重定向到/johnsmith/apps/blog/content/css/style.css
,重定向到/johnsmith/apps/apps/content/blog/content/css/style.css
等等。这是因为apache将使用重写的网址重复重写过程。
此外,我不确定RewriteCond规则是否正确。
所以我认为这应该是:
RewriteRule ^apps/ - [L]
RewriteCond %{DOCUMENT_ROOT}/apps/$1/content/$2 -f
RewriteRule ^(.*?)/(.*)$ apps/$1/content/$2 [QSA,L]
答案 1 :(得分:0)
RewriteCond $1 ^(.*?)/(.*)$
RewriteCond apps/%1/content/%2 -F
RewriteRule (.*) apps/%1/content/%2 [QSA,last]