5

以下は私のディレクトリ構造です

Root/
    index.php
    contact.php
    projects.php
                /index.php
                /project1.php
                /project2.php

すべてのファイル名から .php 拡張子を削除するように書き直しました。www.website.com/projects/project2.phpそれは完全に正常に動作し、からアクセスできますwww.website.com/projects/project2

www.website.com/projects/index.phpとしてもアクセスできるようにしたいwww.website.com/projects

www.website.com/projects/入力時にURLを書き換えるルールを書くことができましたwww.website.com/projects

ただし、最後の末尾のスラッシュを取り除くことができません。

あまりよく分からないのでご了承ください。そのほとんどは、私がインターネットで見つけたものです。私はたくさん見回しましたが、今まで何も機能しませんでした。

コードは次のとおりです。

Options +FollowSymLinks -MultiViews

RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^([^\.]+)$ $1.php [NC,L]
RewriteRule ^projects$ /projects/index.php [L,E=LOOP:1]
4

2 に答える 2

13

これはmod_dir と DirectorySlash ディレクティブが原因です。末尾のスラッシュが欠落しているディレクトリに対する 301 リダイレクト要求を自動的に行います。これにより、インデックス ファイル (例: ) がある場合でもディレクトリの内容が一覧表示されるという情報漏えいセキュリティの問題 (上記のリンクで説明) が修正されますindex.php。したがって、この機能をオフにする場合は、ディレクトリに十分注意してください。ディレクトリのインデックス作成をオフにしている場合、それはそれほど問題ではありません。

次を使用して、ディレクトリのスラッシュを無効にすることができます。

DirectorySlash Off

オプションを使用して、ディレクトリのインデックス作成をオフにすることができます。

Options -Indexes

次に、 php 拡張ルールの前にプロジェクト ルールを設定する必要があります。

Options +FollowSymLinks -MultiViews -Indexes

DirectorySlash Off

RewriteEngine on

RewriteRule ^projects$ /projects/index.php [L,E=LOOP:1]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^\.]+)$ $1.php [NC,L]
于 2013-05-06T22:10:19.590 に答える