2017-05-01 45 views
2

當我嘗試訪問$_GET,請求返回NULL。我有一個用於測試的簡單頁面。我不知道爲什麼我無法獲得這些網址參數?

.htaccess文件:

Options +MultiViews 
RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^([^\.]+)$ $1.php [NC] 
RewriteRule ^article/([A-Za-z0-9-]+)/([0-9]+)/?$ article?title=$1&page=$2 [NC,QSA,L] 

article.php文件:

<?php 
var_dump($_GET); 
echo "<br>"; 
var_dump($_GET["title"]); 
echo "<br>"; 
var_dump($_GET["page"]); 
echo "<br>"; 
?> 
<!DOCTYPE html> 
<html> 
<body> 
<a href="article/myTitle/3/">Link</a> 
</body> 
</html> 

結果:

array(0) { } 
NULL 
NULL 
Link 
+0

你的請求URL是什麼?至少需要 – MrWhite

+0

,交換RewriteRules。現在,您的網址相匹配的第一個 – splash58

+0

我使用的鏈接來訪問$ _GET – Emrats

回答

1
Options +MultiViews 
RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^([^\.]+)$ $1.php [NC] 
RewriteRule ^article/([A-Za-z0-9-]+)/([0-9]+)/?$ article?title=$1&page=$2 [NC,QSA,L] 

這裏有幾個問題。您可能與MultiViews發生衝突。正是這種正在加載article.php(不含查詢字符串參數),而不是你的第一個RewriteRule是追加.php擴展。但是這個指令對於article/myTitle/3/這樣的請求也是不正確的 - 因爲這會導致article/myTitle/3/.php,這顯然是不正確的。

您可以在這裏沒有提到的其他要求,但要使這個具體的例子工作,你只需要像:

Options -MultiViews 
RewriteEngine On 
RewriteRule ^article/([A-Za-z0-9-]+)/([0-9]+)/?$ article.php?title=$1&page=$2 [QSA,L] 

注意這重寫的實際目標(article.php)不article(這將然後需要額外的重寫)。僅使用NC標誌,如果您特別需要它是不區分大小寫(您已經在正則表達式檢查a-zA-Z)。

+1

謝謝。另外,我還添加了.htaccess文件的RewriteRule ^([^ \。] +)$ $ 1.php [NC,L]底部,並將[QSA,L]更改爲[QSA],這樣我就可以訪問沒有.php擴展名的頁面。 – Emrats