私はWordpress Webサイトを実行していますが、wordpress CMSに関連しないいくつかのフォルダがありますが、すべてのWordpressフォルダがあります。
ルートの.htaccess WPフォルダには標準スクリプトがあります:
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
Wordpress CMSは完全に機能しています。これでcompanies
という名前のフォルダーができました。そのフォルダー内に、会社名を持つ他の多くのサブディレクトリがあります。 。毎日作成されるフォルダーが増えるため、この問題の現在のURLは次のとおりです。
www.example.com/companies/company-name/employee.php
これの私の目標は
www.example.com/company-name/employee
(.php
拡張も削除します)。
これを達成する方法は?
ルートフォルダーの.htaccess
を変更してみました。最良の結果は、目的のリンクを機能させることができましたが、WordPressサイト全体で、すべての画像が読み込まれませんでした。 。
companies
フォルダ内に新しい.htaccess
を作成する必要がありますか?新しいフォルダに毎回新しい.htaccess
ファイルを作成してもかまいません(これを機能させるために必死です)。
「companies」フォルダ内に新しい.htaccessを作成する必要がありますか?
いいえ。URLから/companies
ディレクトリを非表示にするには、親ディレクトリの.htaccess
ファイルを変更する必要があります。すなわち。ドキュメントルートのWordPress .htaccess
ファイル。
/ companies内にCSSファイルといくつかの画像があります
そのため、言及された「従業員」のURLだけでなく、すべてのURLから/companies
を削除するつもりだと思います。
WordPressとの競合を回避するために、リクエストされているリソースが/companies
ディレクトリに存在するかどうかを最初にテストする必要があります。その場合は、要求を書き直してください。それ以外の場合は、リクエストがWordPressに渡されるようにします。
ルート.htaccess
ファイル内の既存のWordPressディレクティブ、before)のようなものを試してください:
Options -MultiViews
# Any requests for /companies directly are ignored
# This includes rewritten requests (below)
RewriteRule ^companies/ - [L]
# Check if the requested resource exists in the /companies subdirectory.
# If so, rewrite the request to that subdirectory.
RewriteCond %{DOCUMENT_ROOT}/companies/$1 -f
RewriteRule (.+\.(css|js|png|jpg|gif))$ /companies/$1 [L]
# Check if the requested PHP file exists in the /companies subdirectory
# if requesting a URL that does not already have a file extension.
# NB: Assumes the URL-path does not otherwise contain dots.
# If so, rewrite the request to that subdirectory appending ".php"
RewriteCond %{DOCUMENT_ROOT}/companies/$1.php -f
RewriteRule ^([^.]+)$ /companies/$1.php [L]
# BEGIN WordPress
# :
これは実際にはURLからremove/companies
サブディレクトリ(または.php
拡張)を((変更された質問のタイトル)-そのためには、HTMLソース内のこれらのファイルへの実際のリンクを変更する必要があります。
これにより、URLで/companies
ディレクトリを指定しなくても、ページ/リソースにアクセスできます。
PDATE:この元のリダイレクトから新しいリダイレクトに変更できますか?
はい、最初のルールを変更します。
# Any requests for /companies directly are ignored # This includes rewritten requests (below) RewriteRule ^companies/ - [L]
代わりに次のように:
# Redirect any "direct" requests to the `/companies` directory
# to remove the directory from the URL-path.
# Also removes the ".php" extension (if present)
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteRule ^companies(/.*?)(?:\.php)?$ $1 [R=302,L]
正規表現のキャプチャサブパターン(/.*?)
は貪欲ではありません(?
で示されます)。これは、オプションのキャプチャを回避するためです.php
ファイル拡張子。
REDIRECT_STATUS
環境変数をチェックする条件(RewriteCond
ディレクティブ)により、直接のリクエストのみがチェックされ、書き換えられないことが保証されます以下のディレクティブによるリクエスト。これにより、リダイレクトループが回避されます。 REDIRECT_STATUS
env varは最初のリクエストでは設定されず、最初の書き換えが成功した後にHTTPステータスコード(つまり200
)に設定されます。
このリダイレクトは、古いURLが既に検索エンジンによってインデックスが作成されているか、外部のサードパーティによってリンクされている場合にのみ必要です。これにより、アプリケーションの古いURLを置き換える必要がなくなります。
また、これは現在一時的な(302)リダイレクトであることにも注意してください。正常に機能することを確認したら、これを永続的な(301)リダイレクトに変更してください。
2つの部分を一緒にする:
Options -MultiViews
# Redirect any "direct" requests to the `/companies` directory
# to remove the directory from the URL-path.
# Also removes the ".php" extension (if present)
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteRule ^companies(/.*?)(?:\.php)?$ $1 [R=301,L]
# Check if the requested resource exists in the /companies subdirectory.
# If so, rewrite the request to that subdirectory.
RewriteCond %{DOCUMENT_ROOT}/companies/$1 -f
RewriteRule (.+\.(css|js|png|jpg|gif))$ /companies/$1 [L]
# Check if the requested PHP file exists in the /companies subdirectory
# if requesting a URL that does not already have a file extension.
# NB: Assumes the URL-path does not otherwise contain dots.
# If so, rewrite the request to that subdirectory appending ".php"
RewriteCond %{DOCUMENT_ROOT}/companies/$1.php -f
RewriteRule ^([^.]+)$ /companies/$1.php [L]
# BEGIN WordPress
# :