私はこの問題を解決するために、ウェブ上で、特にここでstackoverflowを見てきました。`/ index.php`を最後のスラッシュを含むすべてのURLから削除するには?
私はディレクトリとindex.php
というファイルのみを使用します。含まれているものと私的なものはpublic_html
(cpanel)のディレクトリの外にあります。ディレクトリ、アンカーリンクとクエリを使用することにより
は、次のようになります。
http://domain.com/sub/#anchor
またはhttp://domain.com/sub/?query
そして私はそれを好きではありません。人々はこれがSEOのために無関係であることを私に言っているが、私はこれが事実であるとは思わない。まず、の一貫性が必要です.2番目に末尾のスラッシュはの複製を作成します。したがって、は301のリダイレクトが必要です。一貫性と重複は確かにSEOの問題です!
これは私のウェブサイトが構成されている方法のほんの一例です:
/
·--index.php
|
·--/about-us/
| |
| ·--index.php
·--/contact-us/
|
·--index.php
ユーザーがabout-us
がディレクトリであることを知っていることはありません、そして、彼らは最後の末尾がとにかくスラッシュを入力しません。重複やHTTPエラーが発生します。 Web上
私は唯一の非作業例を見つけた、と私は理解してきた何のためとして、私は内部に持っている最後のスラッシュとindex.php
を追加します。これは、セキュリティ上の問題を避けるために役立ち、すべてのものを動作させます!
Hereおよびhere似たような質問をしました。しかしその場合は、/public
ディレクトリを作成しなければなりませんでした。今私はホストを変更する管理している、私はPHPファイルを格納するために非パブリックディレクトリを使用することができるようになります。
私はもう/public
ディレクトリが不要なので、そのコードの一部をコピーして新しい.htaccess
に貼り付けました。ここで
は、コードがサブディレクトリにではなく、ルートにうまく動作するようです.htaccess
# Options
Options +FollowSymLinks -MultiViews -Indexes
DirectoryIndex index.php index.html
DirectorySlash off
# Enable Rewrite Engine
RewriteEngine on
RewriteBase/
# www to non-www
RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
RewriteCond %1##%{HTTPS}s ^(.+)##(?:on(s)|)
RewriteRule^http%2://%1%{REQUEST_URI} [L,R=301,NE]
# remove trailing slash from all URLs
RewriteCond %{THE_REQUEST} \s(.+?)/+[?\s]
RewriteRule ^(.+)/$ /$1 [R=301,L,NE]
# To externally redirect /dir/file.php to /dir/file
RewriteCond %{THE_REQUEST} \s/+(.+?)\.php[\s?] [NC]
RewriteRule^/%1 [R=301,NE,L]
# internally add trailing/to directories
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule !/$ %{REQUEST_URI}/ [L]
# To internally forward /dir/file to /dir/file.php
RewriteCond %{DOCUMENT_ROOT}/$1.php -f [NC]
RewriteRule ^(.+?)/?$ $1.php [L]
<FilesMatch ^\.>
order allow,deny
deny from all
</FilesMatch>
<Files *.inc>
order allow,deny
deny from all
</Files>
です。上記のコードは/public
サブディレクトリで動作するように調整されているためです。
どうすればrootでも動作させることができますか?
合計で301回のリダイレクトが必要です。それ以外の場合は、コンテンツの重複が発生します。
http://www.domain.com/
R - >http://domain.com/
http://domain.com/
R - >http://domain.com
http://domain.com/sub/
R - >http://domain.com/sub
http://domain.com/sub/index.php
R - >http://domain.com/sub
http://domain.com/sub/index.php#anchor
R - >http://domain.com/sub#anchor
http://domain.com/sub/#anchor
R - >http://domain.com/sub#anchor
ブラウザでは、 'http://domain.com/R-> http:// domain.com'が既に行われているはずです。 – anubhava
別の点として、アンカーはサーバー側では処理できません。サーバーはHTTP要求で '#anchor 'を取得しない、つまりApacheログでは' http:// domain.com/sub/'のみが受信されます。 – anubhava
'/ index.php'を削除するにはどうすればよいですか? – dcdeiv