0

RewriteBase を使用して、request_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 は次のように解釈されます。

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

としてではなく

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

したがって、条件は常に true です :( .htaccess を正しく記述するには?

4

1 に答える 1

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 を指定しないでください

于 2013-02-18T14:32:18.363 に答える