htaccessRewriteRulesがサブディレクトリで機能しない

ライアン

.htaccessファイルを介してURL書き換えルールを追加しようとしている静的HTMLサイトがあります。

サイトファイルディレクトリは次のようになります。

- index.htm

- about-us [subdirectory]
    - index.htm

- careers [subdirectory]
    - index.htm

- contact [subdirectory]
    - index.htm
    - map.htm
    - privacy.htm

- projects [subdirectory]
    - index.htm
    - education.htm
    - healthcare.htm
    - recreation.htm
    - residential.htm
    - hospitality.htm

- services [subdirectory]
    - index.htm

私の目標は、ページのURLからファイル拡張子を削除し、末尾にスラッシュを追加し、301リダイレクトを強制して、ファイルに元の形式(https://example.com/projects/education.htm)でアクセスしようとする人がいるようにすることです)は、よりクリーンな形式(https://example.com/projects/education/など)に自動的に書き換えられます

私のサイトのルートにある.htaccessファイルでindex.htmファイルをすでに書き換え/リダイレクトしています。これが私がこれまでに持っているものです:

DirectoryIndex index.php index.html index.htm
RewriteEngine On

RewriteCond %{REQUEST_URI} (.*)/$
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.htm -f

RewriteRule ^(.+)/$ /$1/ [R=301,L]
RewriteRule ^index\.htm$ / [R=301,L]
RewriteRule ^(.*)/index\.htm$ /$1/ [R=301,L]

ディレクトリルートファイル(index.htm)をURLから正常に削除しましたが、私の人生では、ルート以外のファイル(つまり、education.htm)を目的の形式に書き換えることができないようです。

誰かが私が間違っていることに光を当てることができますか?

更新

@misorudeのコメントによると、最初の書き換えルールを削除しました。また、301を302に変更しました(少なくとも一時的に、ルールのキャッシュの問題を回避するため)。また、既存のルールを変更して、正規表現の「+」文字を使用して、ルールに実際のファイル名またはフォルダー名を強制しました。

最後に、新しい3番目のルールを追加しました。これは、すべてのサブディレクトリの「インデックス以外の」ページを検索し、それらのファイル拡張子を削除する試みです。これは機能しているようです。ただし、これらの非インデックスページで404エラーが発生します。

以前に機能していたindex.htm書き換えルールはすべて正常に機能していますが、インデックス以外のルールでは404エラーがスローされます。これが私のアップデートhtaccessファイルです:

DirectoryIndex index.php index.html index.htm
RewriteEngine On

RewriteCond %{REQUEST_URI} (.*)/$
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.htm -f

# If we're on the root index page of the site, 
# remove index.htm from URL
RewriteRule ^index\.htm$ / [R=302,L]

# If we're on a subdirectory index page, remove the index.htm from the URL
RewriteRule ^(.+)/index\.htm$ /$1/ [R=302,L]

# If we're on a non-index page of a subdirectory, 
# remove the extension from the   URL
RewriteRule ^(.+)/(.+)\.htm$ /$1/$2/ [R=302,L]

何かアドバイス?

ジャスティン・アーマン

MultiViewsオプションを無効にして各ケースを処理することによる完全なソリューションは次のとおりです

DirectoryIndex index.php index.html index.htm
Options -MultiViews

RewriteEngine On

# redirect "/index.htm" or "/xxx/index.htm" to "/" or "/xxx/"
RewriteCond %{REQUEST_FILENAME} -f
RewriteCond %{THE_REQUEST} \s/([^/]+/)?index\.htm\s [NC]
RewriteRule ^ /%1 [R=302,L]

# redirect "/xxx/page.htm" to "/xxx/page/"
RewriteCond %{REQUEST_FILENAME} -f
RewriteCond %{THE_REQUEST} \s/([^/]+)/([^/]+)\.htm\s [NC]
RewriteRule ^ /%1/%2/ [R=302,L]

# rewrite back "/xxx/page/" to "/xxx/page.htm"
RewriteCond %{DOCUMENT_ROOT}/$1/$2\.htm -f
RewriteRule ^([^/]+)/([^/]+)/$ /$1/$2.htm [L]

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

.htaccessmod_rewriteがサブディレクトリで機能しない

分類Dev

.htaccessリダイレクトがサブディレクトリのindex.phpで機能しない

分類Dev

ディレクトリとサブディレクトリのパスが機能しない

分類Dev

phpがサブディレクトリで実行されていない/ phpがルートディレクトリでのみ機能している

分類Dev

CodeIgniterルーティングがサブディレクトリで機能しない

分類Dev

scsslint-WebpackのホットpreLoaderがサブディレクトリで機能しない

分類Dev

Nginxauth_basicとサブディレクトリでの書き換えが機能しない

分類Dev

Rsnapshot--exclude-fromファイルがサブディレクトリで機能しない

分類Dev

サブディレクトリのSlimPHPAPIでweb.configのURL書き換えが機能しない

分類Dev

PHP Slim 3.htaccessとindex.phpがサブディレクトリで機能しない

分類Dev

Expressルーターがサブディレクトリで期待どおりに機能しない

分類Dev

isDirectory()がUNIXディレクトリで機能しない

分類Dev

htacces macosが疑似ディレクトリで機能しない

分類Dev

サブディレクトリから機能しないリンク

分類Dev

ng-クリックがディレクティブで機能しない

分類Dev

ng-クリックがディレクティブのテンプレート内で機能しない

分類Dev

プリプロセッサディレクティブ(#ifおよび#endif)がCで機能しない

分類Dev

PHP - サブディレクトリにインクルードが機能しない

分類Dev

PHP - サブディレクトリにインクルードが機能しない

分類Dev

Angularjsクリック外部イベントが子ディレクティブで機能しない

分類Dev

importlibがサブディレクトリ内のファイルに対して機能しない

分類Dev

Angular ServiceWorkerがサブディレクトリで機能しません

分類Dev

Railsアセットパイプラインがサブディレクトリで驚くことなく機能しないのはなぜですか?

分類Dev

AngulartranslateディレクティブがngMessageで機能しない

分類Dev

$ watchがディレクティブ内で機能しない

分類Dev

ngModelOptionsがディレクティブで機能しない

分類Dev

変数サブディレクトリが機能しないURLの書き換え

分類Dev

サブディレクトリへのhtcaccessの書き換えが機能しない

分類Dev

Webサイトのホームディレクトリでセッションが機能しない理由

Related 関連記事

  1. 1

    .htaccessmod_rewriteがサブディレクトリで機能しない

  2. 2

    .htaccessリダイレクトがサブディレクトリのindex.phpで機能しない

  3. 3

    ディレクトリとサブディレクトリのパスが機能しない

  4. 4

    phpがサブディレクトリで実行されていない/ phpがルートディレクトリでのみ機能している

  5. 5

    CodeIgniterルーティングがサブディレクトリで機能しない

  6. 6

    scsslint-WebpackのホットpreLoaderがサブディレクトリで機能しない

  7. 7

    Nginxauth_basicとサブディレクトリでの書き換えが機能しない

  8. 8

    Rsnapshot--exclude-fromファイルがサブディレクトリで機能しない

  9. 9

    サブディレクトリのSlimPHPAPIでweb.configのURL書き換えが機能しない

  10. 10

    PHP Slim 3.htaccessとindex.phpがサブディレクトリで機能しない

  11. 11

    Expressルーターがサブディレクトリで期待どおりに機能しない

  12. 12

    isDirectory()がUNIXディレクトリで機能しない

  13. 13

    htacces macosが疑似ディレクトリで機能しない

  14. 14

    サブディレクトリから機能しないリンク

  15. 15

    ng-クリックがディレクティブで機能しない

  16. 16

    ng-クリックがディレクティブのテンプレート内で機能しない

  17. 17

    プリプロセッサディレクティブ(#ifおよび#endif)がCで機能しない

  18. 18

    PHP - サブディレクトリにインクルードが機能しない

  19. 19

    PHP - サブディレクトリにインクルードが機能しない

  20. 20

    Angularjsクリック外部イベントが子ディレクティブで機能しない

  21. 21

    importlibがサブディレクトリ内のファイルに対して機能しない

  22. 22

    Angular ServiceWorkerがサブディレクトリで機能しません

  23. 23

    Railsアセットパイプラインがサブディレクトリで驚くことなく機能しないのはなぜですか?

  24. 24

    AngulartranslateディレクティブがngMessageで機能しない

  25. 25

    $ watchがディレクティブ内で機能しない

  26. 26

    ngModelOptionsがディレクティブで機能しない

  27. 27

    変数サブディレクトリが機能しないURLの書き換え

  28. 28

    サブディレクトリへのhtcaccessの書き換えが機能しない

  29. 29

    Webサイトのホームディレクトリでセッションが機能しない理由

ホットタグ

アーカイブ