2014-11-04 110 views
3

我剛剛搬遷到Vagrant,設置了一個LAMP堆棧,並且我非常高興。我遇到的唯一問題是使用mod_rewrite。我已經確認mod_rewrite已打開,它正在爲重定向工作。mod_rewrite問題Vagrant

下面的代碼是在我的虛擬主機文件:

<VirtualHost *:80> 
    ServerName devserver.local 
    DocumentRoot /var/www/public_html 

    <Directory /> 
     Options FollowSymLinks 
     AllowOverride None 
    </Directory> 

    <Directory /var/www/public_html> 
     Options Indexes FollowSymLinks MultiViews 
     AllowOverride All 
     Order allow,deny 
     allow from all 
    </Directory> 

    ErrorLog /var/log/apache2/vagrant_dev-error.log 
    LogLevel warn 
    CustomLog /var/log/apache2/vagrant_dev-access.log combined 
</VirtualHost> 

然後我在我的.htaccess文件如下:

<IfModule mod_rewrite.c> 

RewriteEngine On 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^tools\/([a-zA-Z_]+)\.json$ tools.php?tool=$1 [QSA,L] 

</IfModule> 

基本上它是如何「用來工作」是我跑http://www.devserver.local/tools/test_function.json並重寫爲http://www.devserver.local/tools.php?tool=test_function

現在我在流浪漢上加載了tools.php,但沒有查詢字符串tool(例如:http://www.devserver.local/tools.php)。這幾乎就像有一些配置允許PHP文件在沒有.php的情況下運行。

我可以得到它,如果我tools.php重命名爲工具,test.php的和更新我的.htaccess工作:

<IfModule mod_rewrite.c> 

RewriteEngine On 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^tools\/([a-zA-Z_]+)\.json$ tools-test.php?tool=$1 [QSA,L] 

</IfModule> 

所以它檢測tools.php退出並加載運行在這之前我的文件.htaccess文件。

我不認爲它具體是一個流浪問題,它可能只是一個設置在Apache或mod_rewrite我需要打開/關閉或配置。有誰之前經歷過這個嗎?

SOLUTION

隨着喬恩·林下文提到的,它是與MultiViews問題被打開。我選擇在我的虛擬主機文件中禁用它,而不是直接從.htaccess禁用它。兩人都工作。

<VirtualHost *:80> 
    ServerName devserver.local 
    DocumentRoot /var/www/public_html 

    <Directory /> 
     Options FollowSymLinks 
     AllowOverride None 
    </Directory> 

    <Directory /var/www/public_html> 
     Options Indexes FollowSymLinks 
     AllowOverride All 
     Order allow,deny 
     allow from all 
    </Directory> 

    ErrorLog /var/log/apache2/vagrant_dev-error.log 
    LogLevel warn 
    CustomLog /var/log/apache2/vagrant_dev-access.log combined 
</VirtualHost> 
+0

您是如何安裝LAMP?流浪漢不能影響Apache的工作。 – Cheery 2014-11-04 04:04:56

+0

@Cheery我安裝了我需要的每個模塊。Apache,PHP,MySQL等都是分開的。我不認爲這是一個流浪者的具體問題,可能只是我需要在mod_rewrite中配置的設置,以便在加載tools /時不會默認爲tools.php。 – 2014-11-04 04:09:40

回答

1

這聽起來像是一個multiviews問題。 Multiviews是mod_negotiation的一部分,並嘗試「猜測」一個URL可映射到的資源。因此,當它在URL中看到/tools/並且它看到文件/tools.php時,它將徹底將請求映射到php文件,從而完全繞過mod_rewrite。

嘗試添加以下內容到htaccess文件:

Options -Multiviews 
+0

就是這樣!我最終在vhosts文件中禁用了它。我會用答案更新我的問題 – 2014-11-04 05:44:15