我们为客户端构建了一个Web应用程序,应该在调用某些特定URL时显示该应用程序。所有其他网址应由现有的Typo3安装处理。不幸的是,我们无法访问Apache2配置,因此无法访问重写日志或更改VirtualHost定义。
.htaccess看起来大概是这样的:
RewriteEngine On
# http://example.com/sub/foo/
RewriteCond %{REQUEST_URI} ^/sub/foo/.*
RewriteRule .* special.php [L]
# http://example.com/sub/bar/year/2014/
RewriteCond %{REQUEST_URI} ^/sub/bar/.*
RewriteRule .* special.php [L]
# Everything else should be typo3
RewriteRule .* general.php [L]
但是,所有呼叫都会路由到general.php
文件。根据{{3}},.htaccess应该按预期工作。服务器是Apache 2.2。
有什么想法吗?
答案 0 :(得分:1)
您需要从上一个规则中排除special.php
。规则1和规则2也可以合并为一个:
RewriteEngine On
# http://example.com/sub/foo/
RewriteRule ^sub/(foo|bar)/ special.php [L,NC]
# Everything other than /special.php should be typo3
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteRule !^special\.php$ general.php [L,NC]
更新(Lars):解决方案是了解[L]
- 标志的工作原理。它重新运行整个循环,因此必须以某种方式编写每个重新执行规则,否定已经重写的部分。另外,从.htaccess
目录中的/sub/
- 文件的角度来看,我放置了所有规则,第一个目录必须省略,如下所示:
RewriteEngine On
# http://example.com/sub/foo/
RewriteRule ^(foo|bar)/ special.php [L,NC]
# Everything other than /special.php should be typo3
RewriteRule !^special\.php$ general.php [L,NC]