0

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

即网址是

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?

4

1 回答 1

1

RewriteBase 仅用于 RewriteRule,而不用于 REQUEST_URI。

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

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

或者,如果projectname并且username可以改变:

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

于 2013-02-18T14:32:18.363 回答