我正在努力写入.htacess文件,将抓住urls像:
http://www.site.com/pageone.html
http://www.site.com/pagetwo.html
并将它们redirect到index.php,这样就可以将“ pageone ”和“ pagetwo ”作为GET参数。
以下是我的答案:
选项+ FollowSymlinks
AuthUserFile / dev / null
AuthGroupFile / dev / null
RewriteEngine On
RewriteOptionsinheritance
RewriteRule ^((?:。[^ /])+)。html $ index.php?page = $ 1 [L]
AddHandler php5脚本.php
这个正则expression式的问题是它捕获了一些页面,同时在其他页面上显示404错误。 而我不明白这个行为。
例如
http://www.site.com/draw.html
工作正常。 我在脚本中获取'draw'作为GET参数。
但
http://www.site.com/draws.html
redirect到404页面
任何人都可以解释我的htacess有什么问题吗?
ps – 我在典型的MAMPconfiguration下在本地的Apache服务器上看到这个。
RewriteRule ^((?:.[^/])+).html$ index.php?page=$1 [L]
^ =锚点在URI的开始 (?: =expression式扩展到组而不创build反向引用;不确定这里的目的是什么。 . =匹配一个字符。 [^/] =匹配任何不是斜杠的东西 + =以上全部,重复一次或多次 .html =必须以.html结尾 $ =锚定URI的结尾。 这个代码可以匹配/ab/cd/ef/foo.html,这绝不会出现在每个目录的上下文中。
它不会匹配奇数长度的资源或目录,因为您明确地忽略了使用(.[^/])那些资源或目录。
既然你没有指定是否应该处理多个子目录,只要匹配你所描述的可以做得更多,更容易:
RewriteRule ^([^/]+).html$ index.php?page=$1 [L]
有关故障排除的进一步帮助,请参阅RewriteLog文档