我在.htaccess中有以下代码,它适用于名称只有一个单词的页面。但是由于包含多个单词的页面名称失败了。
RewriteEngine on
RewriteRule ^(.*)/$ /index.php?page=$1 [L]
我使用结束斜杠表示需要重写url,以避免弄乱真正的文件名。
问题可能与空格是url编码为%20
的事实有关。
有关如何更改正则表达式或.htaccess的任何建议吗?
答案 0 :(得分:1)
RewriteRule documentation包含您可以设置的标记列表。在这种情况下,总是值得一读。
似乎你可能需要B标志:
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (.*) /index.php?page=$1 [B,L]
B标志告诉Apache在替换的反向引用中转义非字母数字字符,这显然是你想要的。
另外,如上所述添加RewriteCond
s提供了一种更安全的方法来避免重写正在请求的真实文件名(如图像)的URL,正如Michael所说。