2013-11-03 96 views
0

我有以下改寫:htaccess的重寫衝突

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.+?)$ user_home.php?domain=$1 [L,QSA] 

這對於重寫我的網址能正常工作,但我現在需要強制使用HTTPS,所以我用這個:

RewriteCond %{HTTPS} !=on 
RewriteRule^https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] 

兩者都可以工作,但它們不能一起工作。

mysite.com/somepage應該重定向到https://mysite.com/somepage

而是將其重定向到https://mysite.com/user_home.php?domain=somepage

我該如何得到這個工作?

+0

你有什麼爲了這2塊? HTTPS第一或第二? – quickshiftin

+0

我試過兩種方法,結果相同 –

+0

你是否有單獨的虛擬主機用於http和https端點? – quickshiftin

回答

3

這適用於我;我猜你的問題可能在服務器配置端或其他地方。雖然AFAICT重寫規則沒有問題。

<VirtualHost *:80> 
    ServerAdmin [email protected] 
    DocumentRoot /var/www 
    <Directory /var/www/> 
     Options FollowSymLinks 
     AllowOverride All 
     Order allow,deny 
     allow from all 
    </Directory> 
</VirtualHost> 

<VirtualHost _default_:443> 
    ServerAdmin [email protected] 
    <Directory /var/www/> 
     Options Indexes FollowSymLinks MultiViews 
     AllowOverride All 
     Order allow,deny 
     allow from all 
    </Directory> 
    SSLEngine on 
    SSLCertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem 
    SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key 
</VirtualHost> 

/var/www/.htaccess

RewriteEngine On 

RewriteCond %{HTTPS} !=on 
RewriteRule^https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.+?)$ user_home.php?domain=$1 [L,QSA] 

/var/www/user_home.php

<?php 
var_dump($_GET['domain']); 

加載http://crazysite.com/test重定向到https://crazysite.com/test和頁面上的輸出

串(4)「測試」

+0

輸出頁面是正確的,唯一的問題是,它顯示在與查詢字符串的網址 –

+1

你試過把它剝離下來像我在我的回答中發佈的東西?有時候,最好的辦法是找到一個最小的東西,並回溯到真實系統中發生錯誤的位置。 – quickshiftin