当一个值为空时重写错误

时间:2017-01-31 08:17:19

标签: .htaccess url-rewriting

我在这里有这条线;

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

但是当2个值中的一个为空时,它会显示找不到页面的错误。我做的例子; 本地主机/消息/ 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 个答案:

答案 0 :(得分:1)

重写规则中的正则表达式与localhost / news / dgfgh

不匹配

重写规则正在查找新闻,然后是两个组,后跟一个尾部斜杠。要做你想做的事,你需要两个规则。

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

第一个是你的,在尾部斜杠之前有一个简单的?,表示尾部斜杠是选项。第二个是针对您在示例中没有URL的数字的情况