.htaccess “如何编写重写条件”;是一个文件;使用请求uri和重写库

.htaccess “如何编写重写条件”;是一个文件;使用请求uri和重写库,.htaccess,mod-rewrite,.htaccess,Mod Rewrite,我需要使用RewriteBase找出请求uri是否没有指向特定目录中的文件 即URL是 http://localhost/~username/projectname/images/logo.gif 文件在目录中 /home/username/public_html/projectname/www/images/logo.gif .htacces应该是这样的: RewriteEngine ON RewriteBase /~username/projectname/ RewriteCondit

我需要使用RewriteBase找出请求uri是否没有指向特定目录中的文件

即URL是

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 %{REQUEST_URI} ^/~username/projectname/(.*)$
RewriteCondition /home/username/public_html/projectname/www/%1 -f
不幸的是,重写条件被解释为

/home/username/public_html/projectname/www/~username/projectname/images/logo.gif
而不是

/home/username/public_html/projectname/www/images/logo.gif
因此,条件始终为真:(
如何正确写入.htaccess?

RewriteBase仅用于RewriteRule,而不用于请求URI

我没有测试它,但您可以使用如下条件:

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 %{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 ^/~([^/]*)/([^/]*)/(.*)$ /home/$1/public_html/$2/www/$3 [L]
RewriteRule (.*) app/file-not-found.php?url=$0 [QSA,L]
不要使用上述代码指定任何重写库