1

次のような構造を考えます。

/folderx/a.aspx
/folderx/b.aspx
/foldery/c.aspx
/folderz/d.aspx

現在、ブラウザは次の URL を表示/表示します »

https://xxx.domain.yyy/folderx/a.aspx
https://xxx.domain.yyy/folderx/b.aspx
https://xxx.domain.yyy/foldery/c.aspx
https://xxx.domain.yyy/folderz/d.aspx

代わりにブラウザのアドレスバーに次の URLを表示/表示するようにリダイレクトするにはどうすればよいですか? »

https://xxx.domain.yyy/a
https://xxx.domain.yyy/b
https://xxx.domain.yyy/c
https://xxx.domain.yyy/d

調子:

  • folderxURL の、foldery、などのハードコーディングがfolderz一致しない

これを数日間取得しようとしていますが、上記を満たす実用的なルールセットに到達できません。
誰でも助けることができますか?

4

2 に答える 2

1
RewriteCond %{HTTP_HOST}:%{SERVER_PORT}s ^(.*):(443(s)|\d+s)$
RewriteRule ^/?([^/]+)/([^/]+)\.aspx$ http%3://%1/$2 [NC,R=301,QSA,L,CO=dir:$1:%1:0:/]

最初のルールは、リクエストをリダイレクトし、元のリクエストからのパス情報を使用してCookie を設定します。domain/directory/file.aspxdomain/file dir

RewriteCond %{HTTP_COOKIE} (?:^|;\s*)dir=([^;]+)
RewriteRule ^/?(.*)$ /%1/$1.aspx [QSA,L]

2 番目のルールは、Cookie を読み取り dir、元のリクエストのパスに基づいてリクエストを処理します。これにより、適切なルーティングでURLからディレクトリが削除されます...

于 2012-11-25T14:46:19.180 に答える
0

可能なフォルダー名をハードコーディングしないと、これは不可能です。mod_rewrite は、どのフォルダーが可能かを魔法のようにどのように知るのでしょうか? ハードコーディングする必要があります。それはあなたの条件に違反しますが、それが唯一の方法です。

それぞれを試すことができるため、どのフォルダーがどの aspx ファイルと一致するかを知る必要はありませんが、どのフォルダーが可能かを知る必要があります。可能なフォルダー (たとえば、"folderx"、"foldery"、"folderz") がわかっている場合は、次のように、可能なフォルダーごとに一連の書き換えを行うことができます。

RewriteCond /folderx%{REQUEST_FILENAME}.aspx -f
RewriteRule ^(.+)$ /folderx/$1.aspx [L,QSA]

RewriteCond /foldery%{REQUEST_FILENAME}.aspx -f
RewriteRule ^(.+)$ /foldery/$1.aspx [L,QSA]

RewriteCond /folderz%{REQUEST_FILENAME}.aspx -f
RewriteRule ^(.+)$ /folderz/$1.aspx [L,QSA]

これらのルールは、「定義されたフォルダーに拡張子が aspx のファイルが存在する場合は、それに書き換える」というものです。

于 2012-11-25T14:44:31.533 に答える