web-dev-qa-db-ja.com

URLから.phpとidを削除し、スラッシュに置き換えます

。htaccessで多くのURL書き換えルールを試しましたが、今は行き詰まっています。このURLを変更する必要があります。

    products.php?id=31

    products/31

利用した:

    Options +FollowSymLinks -MultiViews
    # Turn mod_rewrite on
    RewriteEngine On
    RewriteBase /

    ## don't touch /forum URIs
    RewriteRule ^forums/ - [L,NC]

    RewriteCond %{THE_REQUEST} \s/+products(?:\.php)?\?id=([0-9]+) [NC]
    RewriteRule ^ products/%1? [R,L]

    RewriteRule ^products/([0-9]+)/?$ products.php?id=$1 [L,QSA]

    ## hide .php extension snippet
    # To externally redirect /dir/foo.php to /dir/foo
    RewriteCond %{THE_REQUEST} \s([^.]+)\.php [NC]
    RewriteRule ^ %1 [R,L]

    # To internally forward /dir/foo to /dir/foo.php
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME}.php -f
    RewriteRule ^(.+?)/?$ $1.php [L]

これを使用すると、次の結果が得られます。

  products/31

しかし、すべての画像とCSSが表示されません。何か案は?

1
dpluv

これを試して:

RewriteEngine on
RewriteRule ^(.*) $1 [L]
RewriteRule ^products/$ products.php?id=31 [L]

このコードはうまく機能しています。詳細: http://www.askapache.com/htaccess/htaccess.html

2
Ravi

これを試して:

RewriteRule ^(.*)\/$ $1.php [NC]
2
Sri

表示されない画像とCSSについて。 URLがproducts/31のように書き換えられた場合、phpスクリプト自体がルートに存在していても、html内の相対リンクがproducts /に関連していることに注意してください。 htmlはブラウザによって解釈され、ブラウザはproducts /フォルダにいると判断するためです。絶対URL( http:// hostname / で始まるか、rootに相対するため/で始まる)を使用するか、またはそれらを書き換えることもできます。

1
multia