2017-03-28 22 views
1

私は過去2〜3時間この作業をしようとしてきましたが、私は単に正規表現の知識が十分ではありません。ポイント文字列をphpのページとクエリ

私はURL短縮を作成しようとしているので、私はdomain.com/view.php?s=d5Ds93X

のようなものにdomain.com/d5Ds93XのようなURLを指すようにしたい、私は私の.htaccessファイルをいじり、今これを持ってきた:

RewriteEngine on 
RewriteBase/
RewriteRule /(.*?)$ /view.php?s=$1 [L] 

この種の作品は、正しいファイルを指していますが、文字列(d5Ds93X)は渡されません。 URLを訪問するとき、私はちょうど空白のページを取得

<?php 
    if (isset($_GET['s']) && ctype_alnum($_GET['s'])) { 
     echo $_GET['s']; 
    } 
?> 

:私のview.phpファイルには、この(テスト目的のために)のように見えます。しかし、ifルールの前に何かをエコーすると、ページが正しく動作するように表示されます。 GETのデータも渡されますか?または、URL内のデータを検出するコードを追加する必要がありますか?

答えて

2

はこのようにそれを使用します。そのルールは.htaccessのからだけでなく、Apacheの設定から動作しますので、

RewriteEngine on 
RewriteBase/

# If the request is not for a valid directory 
RewriteCond %{REQUEST_FILENAME} !-d 
# If the request is not for a valid file 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^/?(.+)$ view.php?s=$1 [L,QSA] 

は、先頭のスラッシュは省略可能にします。

また、ファイルとディレクトリをスキップするようにルールを制限します。

+0

完璧、ありがとう、ロード!完璧に動作します。あなたは '^ /?($ +)$ 'の各部分が何を意味するのかを説明できます。そして私はそれを推測しています。私は/ admin /別のページにリダイレクトしたいのですが、私はそのルールを書き換える前に[L]を使って他のルールを見ていないようにしていますか? – s1h4d0w

+0

'^ /?'開始時に '/'をオプションにします。 '(。+)'は任意の文字のうちの1つ以上と一致し、最後に '$ 'は入力の終わりを表します。 – anubhava

+0

@ s1h4d0w答えがあなたの問題を解決する場合はそれを受け入れてください。 –

関連する問題