mod_rewriteに奇妙な問題があります。
のようなURI/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を追加する)ファイルにどのように解決できるかを理解したいと思います。