2011-11-05 62 views
0

我在.htaccess中有以下代码,它适用于名称只有一个单词的页面。但是对于由多于一个单词组成的页面名称而言失败。如何在.htaccess中处理多个空格分隔的单词?

RewriteEngine on 
RewriteRule ^(.*)/$ /index.php?page=$1 [L] 

我使用结尾的斜杠来表示url需要重写,以避免搞乱真实的文件名。

该问题可能与空间网址编码为%20这一事实有关。

有关如何修改正则表达式或.htaccess的一般建议?

+0

为避免干扰真实文件名,请使用RewriteCond%{REQUEST_FILENAME}!-f'和'RewriteCond%{REQUEST_FILENAME}!-d' –

回答

1

RewriteRule documentation包含一个可以设置的标志列表。在这种情况下阅读总是值得的。

看来你可能需要B标志:

RewriteEngine on 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule (.*) /index.php?page=$1 [B,L] 

的B标志告诉Apache逃脱非字母数字字符在取代反向引用,这显然是你想要的。正如Michael所说,同样,如上所述添加RewriteCond s为避免重写正在请求的真实文件名(例如图像)的URL提供了一种更安全的方法。

相关问题