在重定向上使用mod_rewrite中的变量

时间:2016-09-01 22:46:26

标签: php apache .htaccess mod-rewrite

我有以下代码,完美无缺,但我的问题是我不想在RewriteRule中硬编码的鸟类。

RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/$ /birds/$1 [L,R=301]

我不想手动添加它,因为有许多文件夹,例如" birds"

示例:

http://domain.com/birds/x.html/

http://domain.com/birds/x.html

但在我的情况下它会返回

http://domain.com/x.html

2 个答案:

答案 0 :(得分:1)

您可以从RewriteCond %{REQUEST_URI} 捕获完整的URI路径,而不是相对于当前目录的RewriteRule

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} ^(/.*)/$
RewriteRule /$ %1 [L,R=301,NE]

答案 1 :(得分:0)

你想要一个重写地图。

http://httpd.apache.org/docs/2.4/mod/mod_rewrite.html#rewritemap

http://httpd.apache.org/docs/2.4/rewrite/rewritemap.html

然后你可以做以下

RewriteMap MyDirs "txt:/etc/apache2/mydirs.txt"
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^/(.*)/?$ /${MyDirs:$1/ [L,R=301]