web-dev-qa-db-ja.com

カスタムパーマリンク

example.com/profile/?name=johnexample.com/profile/john/のようなよりきれいなURLでアクセスできるように私は私のウェブサイトを作成しようとしています。

$_GET["name"]にアクセスできるように動作していますが、404ページが表示されます。私のパーマリンクは/%postname%/に設定されており、$_GETを使ってプロファイル名にアクセスするだけです。プロファイル名は作者のようにWordPressとは関係ありません。

404ページを返さずにこれを実行することが可能かどうか、また、可能であればどのようにしてそれを実行できるのかと思います。私の現在の.htaccessコードは以下の通りです:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^profile/([^/]*)/$ /profile/?name=$1 [L]
</IfModule>

# BEGIN WordPress

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

# END WordPress
1
Kirby

試みているカスタムルールは基準を満たしていません。これは気の利いた オンライン.htaccessテスター ツールで、書き換えロジックを確認するためのものです。

代わりにフォローRewriteRuleを使用してください。

RewriteCond %{QUERY_STRING} (^|&)name=(.*)
RewriteRule ^(.*)$ /profile/%2/? [R=301,L]

最初の行の^example\.com$を実際のドメインに置き換えてください。

WordPressによって作成された<IfModule mod_rewrite.c>タグに埋め込むこともできます。これは、最終結果として次のようになります。

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
# BEGIN Custom Rules
RewriteCond %{QUERY_STRING} (^|&)name=(.*)
RewriteRule ^(.*)$ /profile/%2/? [R=301,L]
</IfModule>
# END Custom Rules
# END WordPress