2016-09-13 13 views
1

私は自分のCMSをPHPで開発しましたが、今はそれをSEO-Friendlyにしたいと思いますが、いくつか問題があります。
htaccessとCMSに関するURLの問題

ウェブサイトのページの大部分は次のように、IDからアクセスできます。

www.example.com/?id=alphanumericId123 
www.example.com/?id=main 

というように、私はこのページのURLを書き換えたいのですが:

www.example.com/aplhanumericId/ 
www.example.com/main/ 

私は、この書き換えルールを書いてきたし、それが正常に動作します:

RewriteEngine On 
RewriteRule ^([^/d]+)/?$ index.php?id=$1 [QSA] 

が、それはカントーのために働くことができません静的なファイルやスクリプトのためにアクセスできるページはいくつかあります。
いくつか例外を設ける方法はありませんか?以下のような:それはファイルではなくディレクトリではありません場合は、あなたのRewriteRule

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 

は基本的にそれがチェックする前

if the requested file exsist { 
    if it is protected { 
     display error 403 
    } else { 
     display file 
} } else { 
    rewrite rule 
} 

答えて

1

は、既存のファイルやディレクトリへのパスを書き換えるべきではありません。

RewriteEngine On 
# Exclude existing files 
RewriteCond %{REQUEST_FILENAME} !-f 
# Exclude existing directories 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^([^/d]+)/?$ index.php?id=$1 [QSA] 

はまた、あなたが数字を除いているとして、あなたのルールはidを使用すると、英数字許可しないことに注意してください。

代替は次のようになります。

... 
# No forward slash 
RewriteRule ^([^\/]+)/?$ index.php?id=$1 [QSA] 

または

... 
# Only a selection of characters including - and _ 
RewriteRule ^([-\w]+)/?$ index.php?id=$1 [QSA] 
+1

@yessureそして、あなたがコメントアウト時にこれらの2つの条件とルールをそれが動作しますか? – jeroen

+1

いいえ、間違いました。申し訳ありません。あなたが泣いた最初の状態は、完璧に働きます、ありがとう。 –