2009-06-22 82 views
0

我的老板要我为URL编写一个代码,比如说“http://our.domain.com/SomeText” - 也就是说,如果URL不包含“.php”或“.html” ,应该用“http://our.domain.com/process.php?string=SomeText”这样的脚本来处理。 这是可能的一个简单的正则表达式?我无法找到正确的表达来做到这一点。 我开始通过将请求重定向到一些特殊的子目录,但现在它应该直接工作,不需要任何进一步的子目录,所以我不知何故必须将寻找页面的常规请求与不包含“.php”或“.html”的请求分开。 ..RegEX for URLrewriting if not“.php”in the path

对我有何建议或链接?

此致敬礼, 罗马。

回答

0

使用mod_rewite你可以这样做重新写.PHP和.html的网址是这样的:

RewriteEngine on 
RewriteRule !\.(php|html)$ process.php/$1 [NC] [QSA] 

然而,你可能还需要从重写URL到其实际存在的文件停止它。 (有可能是躺在附近的其他文件 - 图像/ CSS等,你不希望被重新编写),你可以修改上面添加检查:

RewriteEngine on 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule !\.(php|html)$ process.php/$1 [NC] [QSA] 

添加此检查可能意味着你不实际上并不需要检查扩展名是否是.php或.html以外的任何内容,因为您知道只有在请求的文件不存在时它才会被重写,因此您可以将RewriteRule行修改为:

RewriteRule ^(.*)$ process.php/$1 [NC] [QSA] 

这将意味着任何请求的URL不会作为文件存在将由process.php处理。

+0

谢谢你一千次,也给所有回答我的问题的人大量拥抱!这个解决方案很适合现在,我很高兴我现在不必阅读O'Reilly的RegEx-bible。 它很棒! – user126922 2009-06-22 13:55:05

1

像这样的东西应该做的伎俩

RewriteEngine on 
RewriteCond %{REQUEST_URI} !\.php 
RewriteCond %{REQUEST_URI} !\.html 
RewriteRule (.*) /process.php?string=$1 [QSA] 

有关于这是否会在.htaccess的虚拟主机定义去或直接(一些注意事项放置或不放置/ /)。

此外,你应该加载mod_rewrite。

所有这些假设你实际上使用Apache并且可以使用mod_rewrite。

这是做的是,如果请求的URI不包含字符串.php和.html它然后内部重定向到process.php文件的请求与写入作为查询字符串参数。

如果你有这个问题,那么使用

RewriteLog "/tmp/rewrite.log" 
RewriteLogLevel 9 

,并检查它是如何工作的。为此,您必须控制服务器,因为它必须在主配置文件中使用(不可以使用.htaccess)。

0

至少在mod_rewrite中,您可以使用匹配.php和.html的正则表达式,然后用!作为前缀,这应该否定它。