php - mod_rewrite:複数のパラメーターを持つフォームURLを短いパラメーターに変換します(中間部分なし)

原文 php apache .htaccess mod-rewrite

現在、私は次のタイプのURLを使用しています。

http://subdomain.example.com/index.php?page=contact
http://subdomain.example.com/index.php?page=about
http://subdomain.example.com/index.php?page=category&category_id=1
http://subdomain.example.com/index.php?page=item&item_id=1


そして、私は彼らに次のように見せたいです:

http://subdomain.example.com/contact/
http://subdomain.example.com/about/
http://subdomain.example.com/category-1/
http://subdomain.example.com/item-1/


だから、私は私のページ/ phpファイルを以下に収容します:

category_id -> category_name
item_id     -> item_name


そして、これに私の.htaccessファイル:

RewriteEngine on
RewriteRule ^([^/]*)/$ /index.php?page=$1 [L]
RewriteRule ^([^/]*)/([^/]*)/$ /index.php?page=$1&category_name=$2 [L]


これは私にいくつかの素晴らしいURLを与えますが、私はそれらを中間部分なしで欲しいです。つまり、「カテゴリ」や「アイテム」などを削除したいのです。

http://subdomain.example.com/category/category-1/ -> http://subdomain.example.com/category-1/


私が.htaccessを次のように変更しようとすると、これが機能します。しかし、あなたは私が2行目をコメントアウトしなければならなかったので、私の連絡先ページがもはや機能しないことがわかります:(

RewriteEngine on
#RewriteRule ^([^/]*)/$ /index.php?page=$1 [L]
RewriteRule ^([^/]*)/$ /index.php?page=category&category_name=$1 [L]


私はそれがパラメーターと1対2で関係していることを知っていますが、これを機能させるためにどのように従わなければならないかわからないので、自分に合うようにします。

誰かがこれを解決するのを手伝ってくれるなら、私は本当に平気です!
答え
わかったら...

RewriteEngine on

# Not for real file or directory
RewriteCond %{REQUEST_FILENAME} -d [OR]
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^ - [L]

# for category-1/ and all like xxxxx-xxx-nnn
RewriteRule ^([^/]+-\d+)/?$ /index.php?page=category&category_name=$1 [L]

# for contact/ or about/ or other/
RewriteRule ^([^/]+)/$ /index.php?page=$1 [L]


結果 :

 http://subdomain.example.com/lord-of-the-rings-1/
   ->  http://subdomain.example.com/index.php?page=category&category_name=lord-of-the-rings-1 
関連記事

php - 更新時の検証の誤動作

php - このMySQL外部選択がクエリの速度を低下させる理由を理解する

php - Modxのユーザー拡張フィールドにデフォルト値を設定する

php - PHP / MySQLiの複数のSQLオブジェクト

php - CentOSにPHP FileInfoモジュールをインストールする方法

php - データベースから取得した文字列Null

php - HtmlPurifierBundle config.yml Symfony2でURI.SafeIframeRegexpを構成する方法

php - mysqlはローカルdbプロジェクトのスキーマを使用して、phpで新しいdbを作成するときにdb構造を作成します

php - Functions.phpでメニューCSSワードプレスをオーバーライドする

php - Laravelブレードテンプレートを使用してJSONコンテンツをループする正しい方法?