0

次の URL 書き換えスキームを使用します。

example.com/about/
example.com/this/is/a/page/

に行く:

example.com/pages/about/about.php
example.com/pages/this/is/a/page/page.php

正常に動作しますが、404 エラーが発生すると、入力するexample.com/badpage/と 404 ページが表示されますが、URL 文字列が に変更されますexample.com/pages/badpage/badpage.php

404 エラーが発生しても URL を同じに保つにはどうすればよいですか?

(以下のコードからわかるように、htaccess は要求された URL の末尾に「/」も追加します)


htaccess コード:

DirectoryIndex /pages/index/index.php
ErrorDocument 404 /pages/error/404.php

RewriteEngine On

#Removes the www from domain for SEO
RewriteCond %{HTTP_HOST} ^www\.portal\.example\.com$ [NC]
RewriteRule ^(.*)$ http://portal.example.com/$1 [L,R=301]

# Don't fix direct file links
RewriteCond %{REQUEST_FILENAME} !-f

RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*)$ http://portal.example.com/$1/ [L,R=301]

RewriteRule     ^([A-Za-z0-9_-]+)/?$    pages/$1/$1.php    [NC,L]
RewriteRule     ^([A-Za-z0-9_-]+)/([A-Za-z0-9_-]+)/?$    pages/$1/$2/$2.php    [NC,L]
RewriteRule     ^([A-Za-z0-9_-]+)/([A-Za-z0-9_-]+)/([A-Za-z0-9_-]+)/?$    pages/$1/$2/$3/$3.php    [NC,L]
RewriteRule     ^([A-Za-z0-9_-]+)/([A-Za-z0-9_-]+)/([A-Za-z0-9_-]+)/([A-Za-z0-9_-]+)/?$    pages/$1/$2/$3/$4/$4.php    [NC,L]
4

1 に答える 1

0

存在しないファイルにやみくもに書き換えないように、各書き換えの前に条件を追加する必要があります。主に、最後の 4 つのルールにはいくつかの条件が必要です。

RewriteCond %{REQUEST_URI} ^/([A-Za-z0-9_-]+)/?$
RewriteCond %{DOCUMENT_ROOT}/pages/%1/%1.php -f
RewriteRule ^ pages/%1/%1.php [NC,L]

最初の条件は、 を使用して後方参照されるグループ化を作成します%1。2 番目の条件は、書き換えようとしているパスを作成し、.xml を使用してそのファイルが存在するかどうかを確認します-f。他の人についても同じこと:

RewriteCond %{REQUEST_URI} ^/([A-Za-z0-9_-]+)/([A-Za-z0-9_-]+)/?$
RewriteCond %{DOCUMENT_ROOT}/pages/%1/%2/%2.php -f
RewriteRule ^ pages/%1/%2/%2.php [NC,L]

RewriteCond %{REQUEST_URI} ^/([A-Za-z0-9_-]+)/([A-Za-z0-9_-]+)/([A-Za-z0-9_-]+)/?$
RewriteCond %{DOCUMENT_ROOT}/pages/%1/%2/%3/%3.php -f
RewriteRule ^ pages/%1/%2/%3/%3.php [NC,L]

RewriteCond %{REQUEST_URI} ^/([A-Za-z0-9_-]+)/([A-Za-z0-9_-]+)/([A-Za-z0-9_-]+)/([A-Za-z0-9_-]+)/?$
RewriteCond %{DOCUMENT_ROOT}/pages/%1/%2/%3/%4/%4.php -f
RewriteRule ^ pages/%1/%2/%3/%4/%4.php [NC,L]
于 2013-07-10T22:06:08.250 に答える