Apache-2.2

RewriteRule 未正確重寫 URL

  • May 12, 2014

我有以下虛擬主機文件:

<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 重寫規則工作正常。我正在做一些非常相似的事情。

這是否與在不同的虛擬主機中有兩個不同的重寫規則有關?

有任何想法嗎?

根據http://httpd.apache.org/docs/current/mod/mod_rewrite.html#rewriterule:-

什麼是匹配的?

在 VirtualHost 上下文中,Pattern 最初將與 URL 的主機名和埠之後以及查詢字元串之前的部分進行匹配(例如“/app1/index.html”)。

您的模式與“文件”的確切 URL 匹配。實際的 URL 可能是“/docs”,因此在“^”之後添加“/”可能會起作用:-

RewriteRule    ^/docs$  docs/  [R]

引用自:https://serverfault.com/questions/594646