0

次の .htaccess ファイルがあります。

AddDefaultCharset utf-8
RewriteEngine on
Options +SymLinksIfOwnerMatch
RewriteBase /

# redirect all www-requests to no-www
# -
RewriteCond %{HTTP_HOST} ^www\.site\.com$ [NC]
RewriteRule ^(.*)$ http://site.com/$1 [R=301,L]

# redirect all home pages to / (root)
# -
RewriteCond %{THE_REQUEST} ^.*/index\.(php|html?)
RewriteRule ^(.*)index\.(php|html?)$ /$1 [R=301,L] 

# remove trailing slash from dirs
# -
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)/$ /$1 [R=301,L]

# automatically add index.php when needed
# -
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond $1 !^(index\.php|login\.php|reg\.php|robots\.txt|css/|js/)
RewriteRule ^(.*)$ /index.php [L]

.htaccess ファイルは次のことを行う必要があります (SEO のため)。

  1. ノーwwwへの変換(http://www.site.comなるはずhttp://site.com
  2. 末尾にスラッシュがあるすべての URI は、no-trailing-slash に変換する必要があります:http://site.com/me/リダイレクトする必要がありますhttp://site.com/me
  3. を含むすべての URI は、index.php/index.html何も変換しないhttp://site.com/admin/index.phphttp://site.com/admin/、最終的に次のように表示する必要があります。http://site.com

ただし、現在のバージョンの .htaccess では、アクセスしようとすると循環リダイレクトが発生します ( http://site.com/admin)。ブラウザが取得する必要がある実際のドキュメントはhttp://site.com/admin/index.php.

誰でもこの問題で私を助けてもらえますか?

4

1 に答える 1

1

自動的にロードされるmod_dirというモジュールがあり、末尾のスラッシュがないディレクトリへの要求が末尾のスラッシュでリダイレクトされます。ディレクティブを使用してこれをオフにすることができますが、オフDirectorySlashにするときはセキュリティ警告に注意してください。オフにすると、情報漏えいのセキュリティ上の問題があり、デフォルトのインデックスが読み込まれません。ただし、あなたの緯度規則 (のように見えます) は、間違っていますが、それを行います。

まず、電源をオフにしますDirectorySlash

DirectorySlash Off

次に、最後のルールを次のように変更する必要があります。

RewriteCond %{REQUEST_FILENAME} -d
RewriteCond %{REQUEST_FILENAME}/index.php -f
RewriteRule ^(.*)$ /$1/index.php [L]
于 2013-07-18T21:35:24.907 に答える