如何编写rewriteCondition“是一个文件”使用request_uri和rewriteBase

时间:2013-02-18 13:24:28

标签: .htaccess mod-rewrite

我需要找出request_uri是否使用RewriteBase指向特定目录中的文件。

即。网址是

http://localhost/~username/projectname/images/logo.gif

文件位于目录

/home/username/public_html/projectname/www/images/logo.gif

.htacces应该是这样的:

RewriteEngine ON
RewriteBase /~username/projectname/

RewriteCondition /home/username/public_html/projectname/www%{REQUEST_URI} !-f
RewriteRule (.*) app/file-not-found.php?url=$0 [QSA,L]

不幸的是,RewriteCondition被解释为

/home/username/public_html/projectname/www/~username/projectname/images/logo.gif

而不是

/home/username/public_html/projectname/www/images/logo.gif

因此条件总是如此:( 如何正确编写.htaccess?

1 个答案:

答案 0 :(得分:1)

RewriteBase仅用于RewriteRule,而不是REQUEST_URI。

我还没有测试过,但你可以使用这样的条件:

RewriteCondition %{REQUEST_URI} ^/~username/projectname/(.*)$
RewriteCondition /home/username/public_html/projectname/www/%1 -f

或者,如果projectnameusername可以更改:

RewriteCondition %{REQUEST_URI} ^/~([^/]*)/([^/]*)/(.*)$
RewriteCondition /home/%1/public_html/%2/www/%3 -f

然后你可以根据需要制作RewriteRule。

RewriteRule ^/~([^/]*)/([^/]*)/(.*)$ /home/$1/public_html/$2/www/$3 [L]
RewriteRule (.*) app/file-not-found.php?url=$0 [QSA,L]

不要使用上面的代码指定任何RewriteBase