0

こんにちは、お時間を割いていただきありがとうございます。

.htaccessにseoフレンドリーなURLを作成するためのルールを設定しています。mysqlとphpを使用して、すべてindex.phpにある各ページのコンテンツにデータを入力します。ルールは、たとえば2つのレベルのリンクをカバーするように設定されています。

mysite.com/first-level-link mysite.com/first-level-link/second-level-link

スクリプトは現在、Webサイトのフロントエンド(index.phpにリダイレクトされるすべてのWebページ)で完全に機能しています。しかし、サーバー上の実際のディレクトリにあるサイトのバックエンドにアクセスできません。パスは次のようになります-mysite.com/admin/index.php

ディレクトリとファイルが存在する場合は無視する2つのルール/条件を含めました。以下のコードを含めます。

Options +SymLinksIfOwnerMatch

RewriteEngine on
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]

RewriteRule \.(css|jpe?g|gif|png|js)$ - [L]

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

RewriteRule ^(.*)$ index.php?page=$1 
RewriteRule ^.*/(.*)$ index.php?page=$1 
4

1 に答える 1

1

!-fand条件は次のに!-dのみ適用されるRewriteRuleため、2 番目のルールには条件が関連付けられていません。そのルールの条件もコピーする必要があります。もう 1 つの問題は、2 番目のルールが最初のルールに取って代わられることです。/some/pathが一致^(.*)$する前に一致するため^.*/(.*)$、それらを交換する必要があります。

したがって、すべてのルール (から始まるRewriteEngine on) は次のようになります。

RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]

RewriteRule \.(css|jpe?g|gif|png|js)$ - [L]

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^.*/(.*)$ index.php?page=$1 

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?page=$1 
于 2012-08-01T03:16:42.090 に答える