2017-01-31 9 views
1

ここにこの行があります。1つの値が空の場合に書き換えエラーが発生する

RewriteRule ^news/(.*)/(.*)/$ ./news.php?type=$1&number=$2 [L] 

しかし、2つの値のいずれかが空になったときには、ページが見つからないというエラーが表示されます。私がした例のように。 localhost/news/dgfgh

これを修正する方法はありますか?

Options +FollowSymLinks 
RewriteEngine on 
RewriteBase/

RewriteCond %{REQUEST_URI} "/admin/" 
# Remove .php extension 
RewriteCond %{THE_REQUEST} ^GET\ /[^?\s]+\.php 
RewriteRule (.*)\.php$ /$1/ [L,R=301] 


RewriteRule ^news/(.*)/(.*)/$ ./news.php?type=$1&number=$2 [L] 


RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_URI} ^/(.+)/$ 
RewriteCond %{DOCUMENT_ROOT}/%1.php -f 
RewriteRule ^(.*)/$ $1.php [L] 


# Force trailing slash 
RewriteCond %{REQUEST_FILENAME}.php -f 
RewriteRule .*[^/]$ $0/ [L,R=301] 

答えて

1

あなたの書き換えルールで正規表現は、ローカルホスト/ニュース/ dgfgh

書き換えルールは、最後のスラッシュに続いて、正確に二つのグループに続いてのニュースを探していると一致しません。あなたが望むことをするには、2つのルールが必要です。

RewriteRule ^news/(.*)/(.*)/?$ ./news.php?type=$1&number=$2 [L] 
RewriteRule ^news/(.*)/?$ ./news.php?type=$1 [L] 

最初のものは末尾にスラッシュがオプションであることを示すために、最後のスラッシュの前に簡単な?にあなた次第です。 2番目の例は、例のようにURLに番号がない場合です。

関連する問題