www.example.com/_/randomfolder
からexample.com/randomfolder
に移動します。 /_/randomfolder
のコンテンツにアクセスする必要がありますが、example.com/randomfolder
を表示する必要があります。
私が試したこと:
RewriteEngine On
RewriteCond %{HTTP_Host} !^www\. [NC]
RewriteRule ^(.*)$ http://www.%{HTTP_Host}/$1 [R=301,L,QSA]
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_Host}%{REQUEST_URI} [L,R=301]
問題:/_/randomfolder
の要件を完全に満たしますが、example.com/randomfolder
を表示する必要がありますが、メインドメインexample.com
に影響します。何も表示されず、404ページのみが表示されます。 public_html/index.php
のみを表示します。
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
#To load site from /_/xyz to /xyz without hcanigng url
RewriteRule ^[A-Za-z0-9._]+ /_/%{REQUEST_URI} [L]
問題:アドレスバーを手動でwww.example.com/_/randomfolder
からexample.com/randomfolder
に変更する必要があります。コンテンツは_
ありまたはなしで読み込まれますが、最初に/_/random folder
へのリダイレクトを読み込みます。
あなたはまだ
/_
を含むURLにリンクしていますか?
...はい、ただしユーザーがonclickイベントにリンクしようとするたびに、新しいタブに_/
が表示されます
これを「修正」するために.htaccess
にリダイレクトを実装するかどうかに関係なく、あなたはまだHTMLソースのURLから/_
の部分を物理的に削除する必要がありますユーザーがクリック。それ以外の場合、ユーザーからは「非表示」になりません(ページ上とブラウザーのステータスバーに表示されます)。 リダイレクトこれらのURLは、サーバーに到達するリクエストの数を2倍にし、ユーザーエクスペリエンスを遅くする可能性があります。
...私はメインのpublic_htmlをスパムしたくない
「スパム」の意味が正確にはわかりませんが、ユーザーと検索エンジンに関する限り、URLを(実質的に)メインディレクトリにあるように見せることは、実際にメインディレクトリにあることと同じです。ローカルファイルシステムに関する限り、同じ方法で競合を回避する必要があります。
index.php
が入っているランダムなフォルダは、このようなwe.xyz.com/_/randomfolder/index.php
です。
その場合、ディレクトリではなくindex.php
に直接書き換える必要があります。そうしないと、index.php
の内部サブリクエストを発行するためにmod_dirが必要になります。また、末尾のスラッシュを省略すると、mod_dirは外部リダイレクトを発行します-これは望ましくありません。
仮定:
randomfolder
は、a-z
、A-Z
、0-9
、_
(アンダースコア)、-
(ハイフン)および.
(ドット)。正規表現に含まれているように見えるので、ドットのみを含めましたが、それ以外の場合は、ドットを含むディレクトリを除外する必要はありません。また、ドットを省略すると条件が簡素化されます(リクエストがファイルと一致しないことを確認する必要がないため)。
/_/<randomfolder/<anything>
形式のリクエストは、リクエストから末尾の/<anything>
を取り除きます。そして、/<randomfolder>
(末尾のスラッシュなし)にリダイレクトします。
/<randomfolder>
(末尾のスラッシュの有無にかかわらず)形式のリクエストのみが/_/<randomfolder>/index.php
に書き換えられます。現在、書き換えの前に宛先ファイルが存在することを確認していません(いずれにしても404になります)。
以下を試してください:
# Redirect requests to remove "/_" from the URL
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteRule ^_/([\w.-]+) /$1 [R=302,L]
# Internally rewrite from "/<folder>" to "/_/<folder>/"
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([\w.-]+)/?$ /_/$1/index.php [L]