0

重複の可能性:
URL の .PHP ファイル拡張子を削除する

URL から .php 拡張子を省略するように .htaccess ファイルを設定しました。例えば:

mysite.com/page
mysite.com/item
mysite.com/about

から読む:

mysite.com/page.php
mysite.com/item.php
mysite.com/about.php

これは素晴らしいことです。ただし、URL の残りの部分を無視したいパラメーターに使用します。たとえば、私は欲しい:

mysite.com/item/1234567890/a-product

から読むには:

mysite.com/item.php

それよりも:

mysite.com/item/1234567890/a-product.php

.htaccessでこれを達成する方法はありますか? これが私の現在の.htaccessファイルです:

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php
4

2 に答える 2

0

試す:

RewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} ^/([^/]+)/?
RewriteCond %{DOCUMENT_ROOT}/%1.php -f
RewriteRule ^(.*)$ %1.php [L]

これは、ルールが最初に行ったことを実行するだけでなく、最初のフォルダーの後のものを削除します。

于 2012-10-04T23:27:49.967 に答える
0

ある種の「ルーター」を使用して、ルーターファイルを介してすべてのリクエストをルーティングできます。そのルーター ファイルでは、残りの URL を盗聴して、必要な処理を行うことができます。

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ router.php?url=$1 [PT,L,QSA]
</IfModule>

次に、router.php 内で次のようにします。

if (isset($_GET["url"])) {
    $url = $_GET["url"];
}

/* $url を変数に分割し、item.php ファイルをインクルードし、残りの $url をインクルード ファイルに渡します */

それが正しい方法かどうかはわかりませんが、1 つの方法です。

于 2012-10-04T21:59:37.147 に答える