Htaccess重写不喜欢破折号

时间:2013-07-17 18:51:58

标签: php .htaccess url mod-rewrite url-rewriting

我使用以下重写规则在幕后重写地址,例如/ pageName和/ pageName /到index.php?page = pageName。除了pageName包含 - 。

之外,它完美地工作
RewriteEngine On
RewriteRule ^(\w+)$ /index.php?page=$1
RewriteRule ^(\w+)/$ /index.php?page=$1

如何让这些重写规则接受任何输入(或至少包含A-Z,1-9和-s的输入。

谢谢。

3 个答案:

答案 0 :(得分:1)

RewriteEngine On
RewriteRule ^([0-9a-zA-Z-]+)$ /index.php?page=$1
RewriteRule ^([0-9a-zA-Z-]+)/$ /index.php?page=$1

这应该有用。

答案 1 :(得分:1)

\w相当于[0-9a-zA-Z_]。例如大写+小写字母字符和下划线。 - 是其中的一部分,因此您必须明确允许它:

^([\w\-])$

创建自己的角色类。

答案 2 :(得分:1)

您(可能......)不想重写任何现有文件,因此您可以使用以下内容:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([\w\-]+)/?$ /index.php?page=$1

请注意,我将尾部斜杠设为可选。