我想用 mod_rewrite 重写一个 URLhttp://www.server.com/directory/public到http://www.server.com/directory(其中目录将指向目录/public)
我尝试了几种方法,但还是没能解决。以下是我的配置:
<VirtualHost xxx.xxx.xxx.xxx:443>
ServerAdmin [email protected]
ServerName www.server.com
DocumentRoot /var/www/server.com
<Directory /var/www/server.com>
RewriteEngine on
RewriteCond %{REQUEST_URI} ^/directory
RewriteRule ^(.*)$ /directory/public/ [L]
</Directory>
</VirtualHost>
答案1
尝试将重写规则更改为:
RewriteRule ^/directory(.*) /directory/public$1 [NC,L]
你不需要 RewriteCond
答案2
在<Directory >
上下文中,重写规则中的 URI 不以 开头/
。
对于文件中重写规则的 URI 来说也是如此,.htaccess
因为它们隐式位于目录中。
文档的相关部分标题为“每个目录重写“
要修复此问题,您可以执行以下操作之一:
- 将 RewriteRule 和 RewriteCond 移出
<Directory >
块。 - 从 RewriteCond 和 RewriteRule 的第二部分中删除前导斜杠。
- 遵循 Ivmisooners 的建议,但也要将 RewriteRule 移出
<Directory >
块。 - 按照 Ivmisooners 的建议,但从 RewriteRule 中删除前导斜杠。
如果由我选择,我会使用选项 3。
从我阅读上面链接的文档页面来看,似乎建议你必须Options FollowSymLinks
启用 RewriteRules 才能在每个目录上下文中工作。我自己从未测试过这一点。如果你无法让 RewriteRules 在该块内工作<Directory >
,请尝试添加Options +FollowSymLinks
。