web-dev-qa-db-ja.com

書き換え後のURLページが見つかりません

現在のURLを書き換えたい

http://localhost/sitename/landing-page/?from=Algeria&to=Afghanistan&submit=Submit

to http://localhost/sitename/removals-from-Algeria-to-Afghanistanこの書き換えルールを書きました。

RewriteCond %{THE_REQUEST} ^GET\ /([^/]+)/landing-page/?\?(from)=([^&]+)&(to)=([^&\s]+) [NC]
RewriteRule ^ /%1/removals-%2-%3-%4-%5? [R=301,L]
RewriteRule ^removals-from-([^-]+)-to-([^-]+)$ /removalscenter/landing-page/?from=$1&to=$2&submit=Submit [L]

私のhtaccessコードは..

 # BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /removalscenter/
RewriteRule ^index\.php$ - [L]

RewriteCond %{THE_REQUEST} ^GET\ /([^/]+)/landing-page/?\?(from)=([^&]+)&(to)=([^&\s]+) [NC]
RewriteRule ^ /%1/removals-%2-%3-%4-%5? [R=301,L]
RewriteRule ^removals-from-([^-]+)-to-([^-]+)$ /removalscenter/landing-page/?from=$1&to=$2&submit=Submit [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /removalscenter/index.php [L]
</IfModule>
# END WordPress

これでリンクが変更されます。しかし、ページが見つからないというエラーが表示されます。

3
user5413450

この.htaccessファイルは/removalscenterディレクトリにあると(あなたのRewriteRuleパターンを見て)仮定していますか? (最初のいくつかのディレクティブは汎用で、<sitename>を許可しますが、残りのディレクティブはハードコードされているように見えますか?)

RewriteBaseディレクティブを設定することにより、RewriteRuleのフルパスを指定する必要がありません。substitutions-RewriteBaseを使用する理由です。 RewriteRule置換を相対として保持できます(ルールを簡素化)。例えば:

RewriteRule . /removalscenter/index.php [L]

単純にすることができます:

RewriteRule . index.php [L]

http://localhost/sitename/landing-page/?from=Algeria&to=Afghanistan&submit=Submit

サンプルURLは完全なURLのようには見えません。インデックスドキュメントがありません。 index.php。これを明示的に指定しない場合、mod_dirは「修正」する必要があり、問題を引き起こす可能性のある追加の書き換えが行われます。したがって、これは次のようになります。

http://localhost/sitename/landing-page/index.php?from=Algeria&to=Afghanistan&submit=Submit

同様に、RewriteCondディレクティブの末尾のスラッシュはオプションであってはなりません。

404をさらにデバッグするには、Rフラグを追加して、一時的に内部書き換えを一時(302)外部リダイレクトに変更してみてください。例えば:

RewriteRule ^removals-from-([^-]+)-to-([^-]+)$ landing-page/index.php?from=$1&to=$2&submit=Submit [L,R]

リダイレクトしますか?何にリダイレクトしますか?

1
MrWhite