簡體   English   中英

Vagrant上的mod_rewrite問題

[英]mod_rewrite issue on Vagrant

我剛剛轉向Vagrant,設置了一個LAMP堆棧,到目前為止我真的非常高興。 我遇到的唯一問題是mod_rewrite。 我已經確認mod_rewrite已打開並且它正在用於重定向。

以下代碼位於我的vhost文件中:

<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重命名為tools-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文件之前加載該文件。

我不認為這是一個特別的Vagrant問題,它可能只是Apache或mod_rewrite中的一個設置我需要打開/關閉或配置。 有誰之前經歷過這個嗎?

正如Jon Lin在下面提到的,打開MultiViews是一個問題。 我選擇在我的vhosts文件中禁用它,而不是Jon建議直接從.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>

這聽起來像一個多視圖問題。 多視圖是mod_negotiation的一部分,並嘗試“猜測”URL可以映射到的資源。 因此,當它在URL中看到/tools/並且它看到文件/tools.php ,它會直接將請求映射到php文件,從而完全繞過mod_rewrite。

嘗試將此添加到您的htaccess文件:

Options -Multiviews

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM