我在这里有这条线;
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]
答案 0 :(得分:1)
重写规则中的正则表达式与localhost / news / dgfgh
不匹配重写规则正在查找新闻,然后是两个组,后跟一个尾部斜杠。要做你想做的事,你需要两个规则。
RewriteRule ^news/(.*)/(.*)/?$ ./news.php?type=$1&number=$2 [L]
RewriteRule ^news/(.*)/?$ ./news.php?type=$1 [L]
第一个是你的,在尾部斜杠之前有一个简单的?
,表示尾部斜杠是选项。第二个是针对您在示例中没有URL的数字的情况