.htaccess Mod Rewrite可在文件名中包含破折号时删除文件扩展名中断

.htaccess Mod Rewrite可在文件名中包含破折号时删除文件扩展名中断,.htaccess,.htaccess,我很困惑。我寻找这个问题的答案,但我没有找到任何我能真正联系到的东西 我正在使用一个简单的mod rewrite脚本来摆脱.php扩展名,并添加一个后续的slashon php文件。我有几个简单的PHP页面需要处理。没有什么惊天动地的 RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME}.php -f RewriteRule ^([a-z]+)\/?$ $1.php [NC,L]

我很困惑。我寻找这个问题的答案,但我没有找到任何我能真正联系到的东西

我正在使用一个简单的mod rewrite脚本来摆脱.php扩展名,并添加一个后续的slashon php文件。我有几个简单的PHP页面需要处理。没有什么惊天动地的

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^([a-z]+)\/?$ $1.php [NC,L]
突然我意识到,如果一个文件的名称中有一个破折号,脚本就会中断,我会得到一个404 pahe未找到

www.domain.com/some-file-name.php

我在Chrome和Firefox上也有同样的行为,问题在于你的正则表达式。您只允许使用
小写字母
([a-z]+)。
您需要扩展正则表达式以包含更多字符。您可以使用包含字母、数字和破折号的
([\w-]+)

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^([\w-]+)/?$ $1.php [NC,L]

\w
是速记,包括a-z、a-z、0-9,包括u(下划线)字符。然后在后面添加破折号可以使用破折号

哦,我明白了。谢谢你的代码和解释。