RewriteRule 未正确重写 URL

RewriteRule 未正确重写 URL

我有以下虚拟主机文件:

<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]

相关内容