什么是.htaccess的最佳正则表达式匹配除了'?'或者' /'

时间:2017-02-23 16:27:03

标签: php regex apache .htaccess mod-rewrite

我在.htaccess文件中编写了一个代码,用于搜索引擎友好的URL目的:

RewriteRule ^games/(.*\S)$ helper/Games.php?p=$1 [L]

如您所见,games/之后的所有内容都会重写为helper/Games.php?p=

但我不希望$_GET['p']包含?/

例如,下面的网址 NOT 应按我的规则重写:

example.com/games/Test?Test
example.com/games/Test/Test

请指导我找到正确的正则表达式。 感谢。

2 个答案:

答案 0 :(得分:0)

您只需要否定您不想要的值集,而不是使用通配符.。所以:

RewriteRule ^games/([^/]*[^\s/])$ helper/Games.php?p=$1 [L]

由于查询字符串不是匹配的一部分,因此您首先想要:

RewriteCond %{QUERY_STRING} ^$

答案 1 :(得分:0)

在重写url之前,您需要匹配空的QUERY_STRING:

RewriteCond %{QUERY_STRING} ^$
RewriteRule ^test/([^/]+)$ helper/Gampes.php?p=$1 [L]