我有一个.htaccess规则,基本上指明了通过一个页面的所有访问,并且我从那一点PHP处理它。因此,无论它在哪个目录中,它都会将所有网址传递给此脚本。如何重写url的子集(/ api/something)?
如果我的根/项目/(example.com/project/some/page/where)/一些/页/哪里会重定向到@ frontend.php
RewriteRule !\.(js|ico|gif|jpg|png|css|pdf|swf|doc)$ @frontend.php
我已经达到但是,我希望能够将部分页面推送到不同的处理程序,例如(example.com/project/api/page/where,而不是example.com/project/some/api/where) :
RewriteRule ^/api?$ @api.php
问题是,这是行不通的,不管这条规则是高于还是低于另一条。任何人都可以建议我怎么能做到这一点?
我也曾尝试:
RewriteRule ^/api(/.*)? @api.php [L]
RewriteCond %{REQUEST_URI} !/api
RewriteRule !\.(js|ico|gif|jpg|png|css|pdf|swf|doc)$ @frontend.php [L]
虽然这工作,因为http://example.com/project/api/page/where不推送到@ frontend.php,它不会得到它@ api.php,并产生:
[Wed Apr 18 10:46:12 2012] [error] [client 127.0.0.1] File does not exist: /www/project/api
编辑:
我的最新尝试是:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^api(/.*)? @api.php [L]
RewriteCond %{REQUEST_URI} ^api
RewriteRule !\.(js|ico|gif|jpg|png|css|pdf|swf|doc)$ @frontend.php
与这一个问题是,如果URL与除API /像(example.com/project/test/page/where)任何启动它抛出错误:
[Sat Apr 21 10:50:13 2012] [error] [client 127.0.0.1] File does not exist: C:/xampp/www/projects/frame3/test
这很接近。虽然没有RewriteBase工作。至此,这就是为什么@ frontend.php规则工作得如此之好以至于我不必设置RewriteBase。 – 2012-04-20 21:14:11
我不得不承认,我真的不知道fronted.php之前的标志是干什么的(完成任何事情?)。显然,你可以有没有RewriteBase的规则,你只需要写下相对路径。为了让它没有RewriteBase,我编辑了我的示例。 – Jan 2012-04-21 06:02:12
谢谢。 @符号除了使文件更加模糊之外别无其他,因此大多数人不会轻描淡写。它根本没有URL重写的目的。如果我想要,我可以使用_,〜或=。 – 2012-04-21 13:34:18