Mod重写以在文件名称中包含破折号时删除文件扩展名中断

时间:2016-08-31 21:55:07

标签: .htaccess

我很困惑。我找到了这个问题的答案,但我找不到任何我可以实际联系的内容。

我使用一个简单的mod重写脚本来摆脱 .php 扩展并添加一个尾随的slashon PHP文件。我有几个简单的PHP页面来处理。什么都没有惊天动地。

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

突然间我意识到,如果一个文件在名称中有一个破折号,那么脚本就会破碎,而我得到了一个404 pahe not found ,,,

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

我在Chrome和Firefox上获得相同的行为

1 个答案:

答案 0 :(得分:2)

问题在于你的正则表达式。您只允许lowercase letters ([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,包括_(下划线)字符。然后添加破折号允许破折号。