1

.htaccessのmodrewriteを理解するのに問題があります。http://www.example.com/archive.php?title=about_me動的URLであるURLをに書き換えたいのですがhttp://www.example.com/about_me。私はphpを使用しており、これが現在の.htaccessコードhttp://www.example.com/archive/about_meですが、アーカイブを削除するように書き換えるだけです。

Options +FollowSymLinks -MultiViews
rewriteengine on

RewriteBase /

RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/archive\.php\?title=([^&\ ]+)
RewriteRule ^ /archive/%1? [L,R=301]
RewriteRule ^/?archive/(.*)$ /archive?title=$1 [L]

## Hide .php extension
## To externally redirect /dir/foo.php to /dir/foo
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+)\.php [NC]
RewriteRule ^ %1 [R,L,NC]

私はそれをこのコードで正しく書き直すことができました

RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/archive\.php\?title=([^&\ ]+)
RewriteRule ^ /%1? [L,R=301]
RewriteRule ^/(.*)$ /archive?title=$1 [L]

ただし、ページが見つからないというエラーが返されます

4

2 に答える 2

1

/archive/を削除したい場合は、の形式のURIがスクリプト/something に絶対にルーティングされる必要がarchive.phpあることを確認する必要があります。/my_blogこれは、が実際にリクエストであるかどうか、またはクエリ文字列のタイトルの値として「my_blog」を使用/my_blogしてスクリプトに送信する必要があるかどうかを判断する方法がないためです。最善の方法は、条件を介して既存のリソースのリクエストではないことを確認することです。archive.php-f-d

RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/archive\.php\?title=([^&\ ]+)
RewriteRule ^ /%1? [L,R=301]
# no /archive/ ^

# condition checks
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^/?(.*)$ /archive?title=$1 [L]
于 2013-01-28T19:44:49.707 に答える
0

このような何かがトリックを行う必要があります:

RewriteCond %{QUERY_STRING} ^title=(.*)
RewriteRule ^archive.php /%1?
RewriteRule ^(.*)$ /archive?title=$1 [L]

編集:元の質問に対する私のコメントに記載されているように、最終的なRewriteRuleを追加しました。コメントによると、あなたは次の2つのことをしようとしていると思います。

  1. ユーザーが入力した「実際の」URLを「わかりやすい」URLにリダイレクトします:質問に記載されているとおりにhttp://www.example.com/archive.php?title=about_mehttp://www.example.com/about_me

  2. 「フレンドリ」URLを「実際の」URLに書き換えhttp://www.example.com/about_meます: to http://www.example.com/archive.php?title=about_me、これは述べられているように明確ではありませんでした。

于 2013-01-28T19:29:48.510 に答える