mod_rewrite 有一个奇怪的问题。
URI like/news
将正确匹配,因为news.php
存在。但是,/news/1900-01-01/title
将匹配,就好像它是/news
!
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteCond %{REQUEST_URI} !/$ #workaround for URIs ending in a slash passing the previous check
RewriteRule ^(.*)$ debug.php?page=$1.php&req_filename=%{REQUEST_FILENAME}&req_uri=%{REQUEST_URI} [L]
如果使用/news
它运行会产生预期的结果:
page=/news.php
req_filename=/home/domain/public_html/news
req_uri=/news
如果运行/news/1900-01-01/title
它会产生:
page=/news/1900-01-01/title.php
req_filename=/home/domain/public_html/news
req_uri=/news/1900-01-01/title
为什么%{REQUEST_FILENAME}
两者都一样?
我已经对新闻项目有了解决办法;移到RewriteRule ^news/([0-9]{4}-[0-9]{2}-[0-9]{2})/([a-zA-Z0-9\-]+)$ news-item.php?date=$1&title=$2 [L]
此代码段上方。但是,我想了解 2 个唯一 URI 如何解析为同一个不存在的(脚本添加 .php)文件。