2015-04-18 85 views
2

我在我正在做的PHP站點中遇到一些mod_rewrite規則的問題。mod_rewrite項目在.htaccess中的規則

我在Apache 2.4.9(Unix) - Mac OSX Yosemite附帶的apache。

我在項目的根目錄中有.htaccess文件,它設置爲在虛擬主機中運行...所以我到達項目的地址是http://project.local。下面是我在.htaccess

RewriteEngine On 

# Don't rewrite files 
RewriteCond %{REQUEST_FILENAME} !-f 
# Don't rewrite directories 
RewriteCond %{REQUEST_FILENAME} !-d 

RewriteRule ^pages pages.php [NC] 
RewriteRule ^page/([0-9a-zA-Z]+) page.php?var=$1 [QSA] 

,這裏是我的虛擬主機設置:

<VirtualHost *:80> 
    ServerAdmin [email protected] 
    DocumentRoot "/Users/Me/Sites/project" 
    ServerName project.local 
    ServerAlias project.local 
    ErrorLog "/Users/Me/Sites/logs/project_error_log" 
</VirtualHost> 

,這裏是我在page.php

<?php 
echo "Hello " . $_GET['var']; 
?> 

我可以成功訪問http://project.local/pages ,並根據上述規則顯示pages.php的內容。但是當我去http://project.local/page/testpage,它顯示Hello但不是$_GET['var']。我究竟做錯了什麼?

+0

您是否在進入'page/testpage'時得到_do_? – Halcyon

+0

它顯示一個空白頁面。如果我連接一個'Hello World'或者什麼的,它會在頁面上輸出,所以一定會到達'page.php'頁面。 – ncf

+0

用上面的例子更新我的問題來澄清。 – ncf

回答

0

我通過將以下行添加到.htaccess文件中解決了此問題。

Options FollowSymLinks 
0

禁用選項MultiViews通過將該代碼在你的.htaccess:

Options -MultiViews 
RewriteEngine On 

# Don't rewrite files 
RewriteCond %{REQUEST_FILENAME} !-f 
# Don't rewrite directories 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^pages pages.php [NC,L] 

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^page/([0-9a-zA-Z]+)/?$ page.php?var=$1 [QSA,L,NC] 

選項MultiViews所使用的Apache's content negotiation module運行mod_rewrite之前,使文件的Apache服務器匹配擴展。所以/file可以在URL中,但它將服務/file.php

+0

這有助於解決問題,但它並沒有爲我工作。 – ncf

+0

你在瀏覽器中輸入了什麼內容?同時顯示你的問題完整的htaccess。 – anubhava

+0

我使用'http:// project.local/page/testpage'訪問頁面。我已經爲解決它的問題添加了答案。感謝您的幫助,我確實在'.htaccess'中添加了'Options -MultiViews',但它似乎沒有區別它是否在那裏。 – ncf