我正在使用apache构建一个简单的API,我想将/really/long/path/api/captions.php?caption_id=blah
映射到/really/long/path/api/captions/blah
。不必在重写规则中指定完整路径很重要,因为无论将此代码部署到何处,我都希望它都能正常工作。但是,我找不到/找出.htaccess
重写规则的工作示例,这些规则使我能够仅根据扩展的最后一部分进行匹配。
因此,假设我在名为 api
的目录中captions.php
,我需要在api
中包含哪个.htaccess
文件才能完成此转换,而无需在其中的任何地方/really/long/path/
?
(我还希望能够将/really/long/path/api/captions.php
映射到/really/long/path/api/captions/
和/really/long/path/api/captions
。
我已经尝试了各种类似通配符的语法;这是其中一个非工作尝试:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*?)/?captions/(.*?)/?$ /captions.php?caption_id=$1 [L]
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9} /captions.php?caption_id=([^& ]+)
RewriteRule ^(.*?)/?captions.php$ /captions/%1? [L,R=301]
谢谢!
最后到了那里。这就是所需要的:
RewriteEngine On # Turn on the rewriting engine
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^captions/?$ captions.php [NC,L]
RewriteRule ^captions/(.*)/?$ captions.php?caption_id=$1 [NC,L]