我有以下虚拟主机文件:
<IfModule !wsgi_module>
LoadModule wsgi_module modules/mod_wsgi.so
WSGISocketPrefix run/wsgi
</IfModule>
<VirtualHost *:80>
RewriteEngine On
RewriteLog "/var/log/httpd/rewrite_log"
RewriteLogLevel 1
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,NE,L]
</VirtualHost>
<VirtualHost *:443>
ServerName https://tendril-api.dev.adnxs.net
ServerAlias 06.tendril-api.dev.nym2.adnexus.net/api
RewriteEngine on
RewriteRule ^docs$ docs/ [R]
...
# SSL & WSGI Setup
</VirtualHost>
由于某种原因,我的docs
重写规则根本没有生效。这是为什么?我的 *:80 VirtualHost 中的 HTTP-->HTTPS 重写规则运行正常。我正在做一些非常类似的事情。
这是否与不同的 VirtualHosts 中有两个不同的重写规则有关?
有任何想法吗?
答案1
按照http://httpd.apache.org/docs/current/mod/mod_rewrite.html#rewriterule:-
什麼是匹配?
在 VirtualHost 上下文中,模式最初将与 URL 中主机名和端口之后、查询字符串之前的部分进行匹配(例如“/app1/index.html”)。
您的模式与“docs”的精确 URL 匹配。实际 URL 可能是“/docs”,因此在“^”后添加“/”可能会有效:-
RewriteRule ^/docs$ docs/ [R]