0

こんにちは、IIS 6 で動作する次の isapi 書き換えルールがあります。

それは次のように書き換えます。

http://www.mysite.com/index.php?category=white-wine

に:

http://www.mysite.com/white-wine

.htaccess の内容:

RewriteEngine on
RewriteBase / 
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ([^/]+)/?$ /?category=$1 [NC,QSA,L]

私は今、ほぼ同じルールを実行しようとしていますが、より深いフォルダーで実行しています。 編集 ルールはサイト ルートの同じ .htaccess ファイルにあります。単純に、上記のルールを、製品というルートのフォルダーにある index.php ファイルに適用したいだけです。

書き直したい:

http://www.mysite.com/product/index.php?product=the-chosen-product 

に:

http://www.mysite.com/product/the-chosen-product

私はこれを試しました:

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ([^/]+)/product/?$ /product/?product=$1 [NC,QSA,L]

私のphpページで大量のエラーが発生しますが、これは機能していません:

Warning: require_once() [function.require-once]: URL file-access is disabled in the server configuration

Warning: require_once(http://www.mysite.com/myfolder/framework/library.php) [function.require-once]: failed to open stream: no suitable wrapper could be found

もともと最初のルールでこれらのエラーが発生していましたが、現在はそれが機能しているため、2番目のルールを何らかの方法で実行できるに違いないと思いますか?

また、表示する代わりにどのように変更しますか:

http://www.mysite.com/product/my-chosen-product 

次のように表示されます。

http://www.mysite.com/product/my-chosen-product.htm

私はこれに本当に慣れていません。私は他の多くの投稿を調べましたが、特に isapi rewrite は mod_rewrite とは少し異なるように動作するため、完全に混乱しました。

4

1 に答える 1

1

RE:「警告: require_once() [function.require-once]: URL ファイル アクセスが無効になっています...」.

使用しないでくださいrequire_once(http://www.mysite.com/myfolder/framework/library.php)-- サーバーでは禁止されています (ただし、有効にしたとしても、この方法で使用することはお勧めしません)。require_once($_SERVER['DOCUMENT_ROOT'] . '/myfolder/framework/library.php')代わりに使用してください。


RE: Rewrite ルール (製品用)。代わりにこれを使用してください:

RewriteCond ${REQUEST_URI} !^/product/index\.php
RewriteRule ^product/([^/]+)/?$ /product/index.php?product=$1 [NC,QSA,L]

したがって、.htaccess 全体は次のようになります。

RewriteEngine on
RewriteBase / 

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^/]+)/?$ /index.php?category=$1 [NC,QSA,L]

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^product/([^/]+)/?$ /product/index.php?product=$1 [NC,QSA,L]

ルールにいくつかの小さな変更を加えました。index.phpすぐに指定してください。そうしないと、IIS は後で正しいスクリプト名を見つけなければなりません..これには、小さいながらもリソースが必要です。


これらのルールは、拡張子のない URL (例: http://www.mysite.com/product/the-chosen-product) で機能します。.htmそのような URL に拡張子を付けたい場合は、次のことを行う必要があります。

a) アプリケーションでこれらの URL をすぐに生成する

b) 書き換えルールを少し変更します。RewriteRule 行を次のように置き換えます。

RewriteRule ^([^/]+)\.htm$ /index.php?category=$1 [NC,QSA,L]
RewriteRule ^product/([^/]+)\.htm$ /product/index.php?product=$1 [NC,QSA,L]

このような変更により、古い拡張子のない URL ( なし.htm) は機能しなくなります。

于 2011-07-08T16:22:07.337 に答える