我遇到的问题如下:
RewriteRule ^site site.php [NC,L]
RewriteRule ^site/([0-9a-zA-Z_-]+)$ site.php?parameter=1$ [NC,L]
这个想法是认识到如果url中有参数。 这就是我想要的:
www.example.com/site
www.example.com/site/1
据我所知,但我只是在尝试没有成功的事情。 提前谢谢。
答案 0 :(得分:1)
在您的规则对中,第一个规则将匹配两个示例网址。因此,第二条规则永远将被应用。您必须更改规则的顺序:
RewriteEngine on
RewriteRule ^/?site/([0-9a-zA-Z_-]+)$ site.php?parameter=$1 [NC,L]
RewriteRule ^/?site/?$ site.php [NC,L]
请注意,我还略微修改了现在的第二条规则,以防止它匹配/sitelist
之类的路径。此外,由于匹配/site.php
,它也会阻止重定向循环...我添加的初始/?
允许在http服务器主机配置中使用相同的规则而不进行修改,不仅在{{1}中样式动态配置文件。
一般提示:您应该始终更喜欢将此类规则放在http服务器主机配置中,而不是使用动态配置文件(" .htaccess
")。这些文件非常容易出错,难以调试,它们确实会降低服务器的速度。它们仅作为最后一个选项提供给您无法控制主机配置的情况(阅读:非常便宜的托管服务提供商),或者您有一个依赖于编写自己的重写规则的应用程序(这是一个明显的安全噩梦) )。
答案 1 :(得分:1)
此行会将以site
开头的所有网址重定向到site.php:
RewriteRule ^site site.php [NC,L]
此行永远不会运行,因为site
已被第一条规则捕获并重定向:
RewriteRule ^site/([0-9a-zA-Z_-]+)$ site.php?parameter=$1 [NC,L]
因此,首先运行第二条规则将解决问题,因为它会触发更具体的案例。