1

現在、ある会社で URL の書き換えを行っていますが、新しい URL が正しいファイルを指すようにするのに苦労しています。

CMS にアクセスできません。ページは 2 つの形式で生成されます。

  • website.com/pressReleases.php?lang=EN
  • website.com/page.php?pagename=概要&lang=EN

各形式を同じ必要な形式 (website.com/language/pagename) にするために書き換えを使用しました。

フォーマット 1 (website.com/pressReleases.php)

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

フォーマット 2 (website.com/page.php?pagename=About&lang=EN)

RewriteCond %{THE_REQUEST} ^(GET|HEAD)\ /page.php
RewriteCond %{QUERY_STRING} pagename=([^&]+)&lang=([^&]+)
RewriteRule ^page.php$ /%2/%1? [R=301,L]

問題は、2 つの形式の書き換えの出力が同じであるが、ソース ファイル/パスが異なることです。ナイス URL を実際のソースに転送する別のリダイレクトを作成すると、両方に適用されます。

RewriteRule ^([A-Za-z]+)/([0-9]+)/([a-zA-Z0-9_-]+)$ productSelection.php?    groupid=$2&lang=$1 [L]

両方の URL タイプに同じナイス形式を使用して、元のパスに転送する方法はありますか? これを妨げている書き直しを間違って構造化しましたか?

どんな助けでも大歓迎です!

4

1 に答える 1

0

-f最初にphpファイルのチェックを試み、それが失敗した場合は、2番目の形式を使用します。

# format 1
RewriteCond %{REQUEST_URI} ^/([^/]+)/(.*)$
RewriteCond %{DOCUMENT_ROOT}/%2.php -f
RewriteRule ^/?([^/]+)/(.*)/?$ /$2.php?lang=$1 [L,QSA]

# format 2
RewriteCond %{REQUEST_URI} ^/([^/]+)/(.*)$
RewriteCond %{DOCUMENT_ROOT}/%2.php !-f
RewriteRule ^/?([^/]+)/(.*)/?$ /page.php?pagename=$2&lang=$1 [L,QSA]

また、最初のformat1ルールで実際のリクエストと照合する必要があります。

RewriteCond %{THE_REQUEST} ^(GET|HEAD)\ /([^\ \?\.]+)\.php\?lang=
RewriteCond %{QUERY_STRING} ^lang=(.*)$
RewriteRule ^(.*).php$ /%1/$1? [L]
于 2012-10-19T22:43:18.620 に答える