2014-11-04 71 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