1

site.com/dir/page1.phpフォーマット内のページがフォーマットに変換された場合、書き換えルールが正常に機能していましたsite.com/page1。私はそれを達成しました:

# 1. turn on the rewriting engine
RewriteEngine On

# 2. remove the www prefix
RewriteCond %{HTTP_HOST} ^www\.site\.com [NC] 
RewriteRule ^(.*)$ http://site.com/$1 [L,R=301]

# 3.  send all non-secure pages to secure pages
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}

# 4. if 404 not found error, go to homepage
ErrorDocument 404 /index.php

# 5. if url received with trailing slash (e.g. http://domain/test/) then go to correct page (e.g. http://domain/pages/test.php)
RewriteRule ^([^.]+)/$ includes/$1.php

# 6. if url received WITHOUT trailing slash (e.g. http://domain/test) then go to correct page (e.g. http://domain/pages/test.php)
RewriteRule ^([^.]+)$ includes/$1.php

でブログをセットアップしましたが、ブログsite.com/blog/にアクセスしようとすると、ホームページが表示されます (つまり、404 エラー)。

エラーは #5 と #6 にあると思いますが、どういうわけか、書き換えルールが特に「includes」ディレクトリ専用であることを指定する必要がありますか? しかし、私は間違っている可能性があります。

アップデート:

ここで「ブログ」ディレクトリを無視する解決策を試しました:

拡張子、末尾のスラッシュ、www を取り除くための書き換えルール用に .htaccess ファイルを構成するにはどうすればよいですか?

#skip wordpress site which starts with blog
RewriteCond %{REQUEST_URI} !^/blog [NC]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.php [NC,L]

しかし、残念ながらそれは私にとってはうまくいきませんでした。

4

1 に答える 1

2

での書き換えを防ぐにはblog/、ルール 5、6 (一般的な書き換え) の前に次を配置します。

# Do not apply the following to the blog
RewriteCond %{REQUEST_URI} !^/blog

# 5. if url received with trailing slash (e.g. http://domain/test/) then go to correct page (e.g. http://domain/pages/test.php)
# Merged 5 & 6 together by making the trailing slash optional /?
RewriteRule ^([^.]+)/?$ includes/$1.php

もう 1 つの可能性は、存在するディレクトリの書き換えを防ぐことです。

# Do not apply the following to actual existing files and directories
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

# Merged 5 & 6 together by making the trailing slash optional /?
RewriteRule ^([^.]+)/?$ includes/$1.php
于 2013-02-18T13:35:22.307 に答える