2017-10-30 7 views
0

これは私のコードですtest.phpmod rewrite URLをvalueに使用するには、値に( - )が含まれていますか?

です。

<?PHP 
include("connect.php"); 
$id_val = mysqli_real_escape_string($db_mysqli,$_GET['id_val']); 
echo $id_val; 
?> 

私はそれが働いていない

www.example.com/test/8-pi7Tvu66 

にアクセスしようとするとこれは私のモッズ書き換えコード(.htaccess

RewriteEngine on 
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI}.php -f 
RewriteRule ^(.*)$ $1.php [L] 
RewriteRule ^test/([^-]*)$ /test.php?id_val=$1 [L] 
DirectoryIndex index.php 

です。 (これは。何もエコーのindex.phpにリダイレクトしていないことになるのです)

しかし、私は

www.example.com/test.php?id_val=8-pi7Tvu66 

にアクセスしようとしたとき、それは仕事の良いことです。 (echo 8-pi7Tvu66)

modリライトURLの作業にはどうすればいいですか?

www.example.com/test/8-pi7Tvu66 

...

備考:私はまだ含まれていないことをid_valでテストしてみました -

eg: 
    www.example.com/test/8pi7Tvu66 

そして、それは仕事の良いことです()。明示的ダッシュ以外のすべてと一致する

^test/([^-]*)$ 

:(エコー8pi7Tvu66)

+0

SQLインジェクションを防ぐために 'mysqli_real_escape_string()'に依存しないでください(それだけでは不十分です)(https://stackoverflow.com/questions/5741187/sql-injection-that-gets-around-mysql-実際のエスケープ文字列)。あなたは[** mysqli **](https://secure.php.net/manual/en/mysqli.prepare.php)または[** PDO **](https ://secure.php.net/manual/en/pdo.prepared-statements.php)ドライバ。 [**この記事**](https://stackoverflow.com/questions/60174/how-can-i-prevent-sql-injection-in-php)には、いくつかの良い例があります。 –

+0

私は 'mysqli_real_escape_string'と' mysqli'を使ってSQLインジェクションから私を守ることができませんか? – mamiw

+0

@mamiwそれはあなたを守ることができないわけではありません。mysqli_real_escapeを使っているのは正しいことを得るのが難しいということです。一般的に受け入れられているより簡単な方法は、準備されたステートメントを使用します。 @ AlexHowanskyのリンクを参照してください。 – hunteke

答えて

0

あなたのRewriteRuleには、以下の正規表現があります。すべての文字に一致させる場合は、

^test/(.*)$ 

に変更できます。

+0

'^ test /(.+)$'は '^ test /([^ - ] *)$'よりも優れていますか? – mamiw

+0

'-'が動作しないという問題がある場合は、yesとなります。これにより、その文字が受け入れられたリストに追加されます(現在、それが動作しない唯一の文字なので)。 – iainn

+0

私は^ test /(.+)$を使用すると、すべての記号が自分のコードで動作していますか? 'EG:_ + - '? – mamiw

関連する問題