【发布时间】:2011-07-16 07:02:30
【问题描述】:
我对修改一些 url 和路径的重写规则很感兴趣。这里有一些例子。
我有一些主机名通过 Apache conf 中的 ServerAlias 查找 1 个 VirtualHost。
example.com
anotherdomain.com
same.org
还有很多其他域。在这里,我想做的事:
example.com/uploads/photo.png -> /www/example.com/uploads/example.com/photo.png<br />
anotherdomain.com/uploads/photo.png -> /www/anotherdomain.com/uploads/anotherdomain.com/photo.png<br />
其他域也是如此。这个东西我已经做好了。
RewriteCond %{HTTP_HOST} ^(www\.)?(.*)$
RewriteRule ^uploads/([a-zA-Z0-9-\._]+)$ uploads/%2/$1 [L]
这项工作完美无缺。但是,如果我尝试访问 uploads/icons/category/image.png
我开始看到 500 内部 Apache 错误...
我已将 Rule 修改为:
RewriteCond %{REQUEST_URI} !^/uploads/%{HTTP_HOST}
RewriteCond %{HTTP_HOST} ^(www\.)?(.*)$
RewriteRule ^uploads/([a-zA-Z0-9-\._/]+)$ uploads/%2/$1 [L]
并启用 Apache 重写日志,详细程度为 9。
RewriteCond: input='/uploads/icons/category/image.png' pattern='!^/uploads/%{HTTP_HOST}' => matched
rewrite 'uploads/icons/category/image.png' -> 'uploads/example.com/icons/category/image.png'
RewriteCond: input='/uploads/example.com/icons/category/image.png' pattern='!^/uploads/%{HTTP_HOST}' => matched
rewrite 'uploads/example.com/icons/category/image.png' -> 'uploads/example.com/example.com/icons/category/image.png'
在那之后,它用尽了 10 次查找 =(
当我修改这个
RewriteCond %{REQUEST_URI} !^/uploads/example.com
RewriteCond %{HTTP_HOST} ^(www\.)?(.*)$
RewriteRule ^uploads/([a-zA-Z0-9-\._/]+)$ uploads/%2/$1 [L]
它适用于所有东西,但仅适用于 1 个域:example.com
我找到了另一个解决方案,但它并不完美。
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{HTTP_HOST} ^(www\.)?(.*)$
RewriteRule ^uploads/([a-zA-Z0-9-\._/]+)$ uploads/%2/$1 [L]
此规则仅在我存在目录和文件时才有效。但是,如果我尝试访问:/uploads/images/not-existed-404.nothing -> 它返回 500,因为此文件不存在并重写为:
/uploads/example.com/example.com/example.com/example.com.......
附注对不起我的英语不好;)
【问题讨论】:
标签: apache mod-rewrite