2017-05-01 13 views
2

$_GETにアクセスしようとすると、NULLが返されます。私はテストのために使っているシンプルなページを持っています。私はなぜこれらのURLパラメータを取得できないのか分かりません。

.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を入れ替えます。あなたのURLは最初のものと一致します – 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と競合しています。これは、最初にRewriteRule.phpという拡張子を付加したものではなく、(クエリ文字列の引数なしで)article.phpをロードするものです。しかし、この指示文は、article/myTitle/3/のような要求に対しても間違っています。これは、明らかに正しくないarticle/myTitle/3/.phpになるためです。これだろう(これは実際のターゲット(article.php)ないarticleに書き換えていること

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

注:

あなたはここに記載されていない他の要件がある場合がありますが、この具体的な例は、あなただけのようなものが必要になります動作させるために追加の書き換えが必要です)。大文字小文字を区別しないようにする必要がある場合は、NCフラグのみを使用してください(正規表現ではa-zA-Zを既にチェックしています)。

+1

ありがとうございます。また、.htaccessファイルのRewriteRule ^([^ \。] +)$ $ 1.phpを追加し、[QSA、L]を[QSA]に変更して、拡張子.phpのないページにアクセスできるようにします。 – Emrats