mod_rewrite文件存在并且正则表达式条件在一起

时间:2015-06-01 12:59:37

标签: regex .htaccess mod-rewrite

我有一个重写指令,从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。你看到我犯了什么错误吗?

1 个答案:

答案 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]