我有一个重写指令,从dir /到dir / app / webroot /
问题是,在dir / app / webroot中我有以下条件:
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php [QSA,L]
这就是说文件不存在会创建无限循环,因为它无法找到index.php。我相信问题是在!-f条件下搜索dir / app / webroot / dir /index.php而不是dir / app / webroot / index.php。
如何使用正则表达式操作URI中的URI:^ dir /(.*)$所以我只能使用页面(dir /之后的内容)来纠正路径?
到目前为止我所拥有的是:
RewriteCond %{REQUEST_URI} ^/dir/(.*)$ [NC]
RewriteCond %{DOCUMENT_ROOT}/dir/app/webroot/%1 !-f
RewriteRule ^(.*)$ index.php [QSA,L]
这修复了无限循环,但现在它总是重定向到index.php。你看到我犯了什么错误吗?
答案 0 :(得分:1)
如果该文件位于webroot
,则无法查看webroot/dir
- 它根本没有理由。
我已经使用以下文件进行了测试,它似乎对我有用:
<强> /dir/.htaccess
强>
RewriteEngine on
RewriteBase /dir/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d [OR]
RewriteCond %{REQUEST_URI} ^/dir/
RewriteRule ^(.*)$ app/webroot/$1 [L]
<强> /dir/app/webroot/.htaccess
强>
RewriteEngine on
RewriteBase /dir/app/webroot/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^ index.php [L]