0

mod_rewrite の問題への回答を求めて Web をあさりましたが、もう限界だと感じています。次のような URL が表示されますhttp://www.website.com/dashboard.php?username=stackoverflow。この URL は、その中で最も美しいものではありません。だから私の目標は、ここでいくつかのことをすることです...

  1. phpファイルの拡張子を削除します(これまでのところ、以下に示すコードでこれを行うことができましたが、必要な他のことに従ってそのままになるかどうかはわかりません)
  2. 「www」プレフィックスを削除します
  3. ユーザー名クエリ文字列を移動します(「ユーザー名」の場合のみ、「id」などと一致させたくありません)「.com/」の直後
  4. php ファイル名 (拡張子なし) をクエリ文字列の後に移動します。

最終的な URL は次のようになりhttp://website.com/stackoverflow/dashboardますhttp://website.com/stackoverflow/profile

ファイル拡張子を削除する現在のコードは次のとおりです。

Options +FollowSymLinks
RewriteEngine On
RewriteBase / 

# remove .php ONLY if requested directly
RewriteCond %{THE_REQUEST} (\.php\sHTTP/1)
RewriteRule ^(.+)\.php$ /$1 [R=301,L,QSA]

# remove trailing slash ONLY if it is not an existing folder
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/$ /$1 [L,R=301]

# rewrite to FILENAME.php if such file does exist and is not a folder
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ /$1.php [L,QSA]

悲しいことに、これは私の問題の1つを修正するだけであり、それを見た後、これを行うためのより良い方法があると感じています...

4

1 に答える 1

1

(1, 3, 4) 私が理解しているように、きれいな URL を使用したいのですが、PHP ページに支えられています。したがって、次のようになります。

  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteRule ^(\w+)/profile$ /dashboard.php?username=$1 [L]

それは次のようにhttp://website.com/stackoverflow/profile動作しますhttp://www.website.com/dashboard.php?username=stackoverflow

(2) # 301 で www.site.com を site.com にリダイレクト

    RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
    RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
于 2012-04-04T05:36:06.687 に答える