2014-04-06 86 views
0

我在重寫URL時遇到了一些實際問題,任何幫助都將受到大力讚賞。使用舊的.htaccess規則重寫網址

我有一個名爲share.php一個PHP文件,幷包含以下規則.htaccess文件:

RewriteRule ^share/([^/\.]+)/?$ share.php?variable=$1&%{QUERY_STRING} [L] 

如果我瀏覽到domain.com/share/123456,該share.php頁面加載,但在$_GET['variable']沒有價值。 我在.htaccess文件中有一些其他的重寫規則,我認爲他們可能有問題,所以我刪除了所有其他規則。其中一個我刪除規則是rewriting domain.com/previewdomain.com/preview.php

RewriteRule ^preview/?$ preview.php?&%{QUERY_STRING} [L] 

然後我注意到,即使所有的刪除了其他規則,如果我導航到domain.com/preview,它仍然會重寫URL進行預覽。 PHP。

因此,我完全刪除了.htaccess文件,重新啓動了Apache,清除了Firefox中的緩存並再次進行了測試。即使.htaccess文件已被刪除,規則仍然有效。 domain.com/preview仍然重定向到domain.com/preview.phpdomain.com/share/123456仍然重定向到domain.com/share.php(在$_GET['variable']中沒有數據)。

2個域指向服務器,但在任何.conf文件中都沒有重寫規則,並且不再有任何.htaccess文件。我曾嘗試將重寫規則放入域的.conf文件中,但我遇到同樣的問題。

如果我運行phpinfo(),Modrewrite會顯示爲加載模塊。下面是我的域名.conf文件:

<VirtualHost *:80> 
    ServerAdmin [email protected] 
    ServerName domain.com 
    ServerAlias www.domain.com 

    DocumentRoot /home/www/domain.com/public_html 
    <Directory /> 
     Options FollowSymLinks 
     AllowOverride All 
    </Directory> 
    <Directory /home/www/> 
     Options Indexes FollowSymLinks MultiViews 
     AllowOverride All 
     Require all granted 
    </Directory> 

    ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/ 
    <Directory "/usr/lib/cgi-bin"> 
     AllowOverride All 
     Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch 
     Require all granted 
    </Directory> 

    ErrorLog ${APACHE_LOG_DIR}/error.log 

    # Possible values include: debug, info, notice, warn, error, crit, 
    # alert, emerg. 
    LogLevel warn 

    CustomLog ${APACHE_LOG_DIR}/access.log combined 

    Alias /doc/ "/usr/share/doc/" 
    <Directory "/usr/share/doc/"> 
     Options Indexes MultiViews FollowSymLinks 
     AllowOverride All 
    Require all denied 
     Allow from 127.0.0.0/255.0.0.0 ::1/128 
    </Directory> 
</VirtualHost> 

我一直在試圖整個下午排序了這一點,我看不出有什麼不對!任何人都可以將我指向正確的方向嗎?

對於從哪裏開始進行故障排除,我確實感到茫然。我打開了重寫日誌記錄,但沒有出現在日誌文件中。

我在使用PHP 5.5.10的Ubuntu 12.04上運行Apache 2.4.9。

+0

首先,代替使用'&%{QUERY_STRING}'只需將[L]更改爲[L,QSA],並且apache將追加查詢字符串,然後在正則表達式中使用點。你是指'^ share /([^ /] +)/?$'而不是'^ share /([^/\.]+)/?$'?如果只有共享的數值,你也可以做'^ share /([0-9] +)/?$' – Bor691

回答

1

在您的域配置中,選項mod_negotiation已啓用。有關該選項的reference可能會有所幫助。它完全符合你描述的以及你不想發生的事情。在評估重寫規則之前對此進行處理,因此可能與您的問題有關。

您可以從您的域配置中刪除MultiViews選項或通過添加下面一行到你的.htaccess文件禁用此行爲:

Options -MultiViews 

此外,你應該使用QSA標誌(爲查詢字符串追加)而不是手動追加%{QUERY_STRING}

+0

非常感謝!我準備把我的筆記本電腦扔出窗外!我將選項-MultiView添加到域conf文件的目錄部分中,並將QUERY_STRING替換爲QSA。一切都很好,現在:) –