2

CMS で作成された SEO フレンドリーな URL を処理する CMS があります。index.phpしたがって、 likeの拡張であるすべてのものは、www.url.com/index.php?id=slug適切に に変更されwww.url.com/slugます。

ただし、CMS に接続されていない MYSQL クエリ文字列を使用して作成された 1,000 を超えるページもあります。ので、私は持っています:

www.url.com/item.php?id=001234&pg=author-title

ページを生成するには、id と pg の情報が必要です。私が望むのは、これらのページの URL が次のようになることです。

www.url.com/item/001234/author-title.html

これを行うためのすべての方法を探して、多くの mod_rewrite チュートリアルを見てきましたが、機能させることができないようです。

これが私の .htaccess です (ここにあるもののいくつかは、私の CMS によって使用および生成されていることに注意してください。

編集:さて、これまでの回答に基づいて、.htaccessを次のように変更しました:

# Use PHP5 as default
AddHandler application/x-httpd-php5 .php
AddDefaultCharset UTF-8
# File modified on Dec 5 11:28:31 2011 by server
# For security reasons, mod_php is not used on this server. Use a php.ini file for php directives
# php_value default_charset "UTF-8"

Options -Indexes
Options +FollowSymLinks

# blocks direct access to the XML files - they hold all the data!
<Files ~ "\.xml$">
    Order allow,deny
    Deny from all
    Satisfy All
</Files>
<Files sitemap.xml>
        Order allow,deny
    Allow from all
    Satisfy All
</Files>


RewriteEngine on

# Usually it RewriteBase is just '/', but 
# replace it with your subdirectory path
RewriteBase /

# Usually it RewriteBase is just '/', but 
# replace it with your subdirectory path
RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule /?([A-Za-z0-9_-]+)/?$ index.php?id=$1 [QSA,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule  ^/?item/([0-9]+)/([a-zA-Z0-9_]+).html$ item.php?id=$1&pg=$2 [QSA,L]

編集:これまでのフィードバックで .htaccess を変更した後、書き換えられた URL はまだ望ましい結果を生成していません。私はまだ404を取得しています。

4

2 に答える 2

1

変化する

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule /?([A-Za-z0-9_-]+)/?$ index.php?id=$1 [QSA,L] #passes to CMS
RewriteRule ^/?([a-zA-Z_]+)/([a-zA-Z_]+).html$ item.php?id=$1&pg=$2 [QSA,L] #passes to your stuff

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^/?item/([a-zA-Z_]+)/([a-zA-Z_]+).html$ item.php?id=$1&pg=$2 [QSA,L]
# conditions need to be repeated
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule /?([A-Za-z0-9_-]+)/?$ index.php?id=$1 [QSA,L]

より一般的なルールの上に、より具体的なルールを常に配置してください。

また、アイテム ID に文字が使用されていない限り、次を使用します。

RewriteRule ^/?item/([0-9]+)/([a-zA-Z_]+).html$ item.php?id=$1&pg=$2 [QSA,L]
于 2012-06-08T17:09:55.493 に答える
0

item与えられた例と一致するように最初に追加し、文字クラスにいくつかの変更を加える必要があります。試す:

RewriteRule ^item/([a-zA-Z0-9_]+)/([a-zA-Z0-9_]+)\.html$ item.php?id=$1&pg=$2 [QSA,L]

これは、item/[文字、数字、およびアンダースコアの文字列]/[文字、数字、およびアンダースコアの文字列].html の形式の URL に一致します。

ID が数字のみの場合は、最初の文字クラスから文字を削除できます。

于 2012-06-08T17:09:32.837 に答える