我有一个类似下面的文件夹结构www.exampe.com/distributor/index.php 我想通过 SEO 友好的 www.example.com/distributer/abcinc 然后在index.php中想获取最后一段的值(本例中为abcinc)作为变量放入页面中
我的问题是,当我访问www.example.com/distributer/abcinc但如果我转到www.example.com/distributer
这是我的 .htaccess 文件,位于分发服务器文件夹中
RewriteEngine On
RewriteRule ^distributor/([0-9]+)$ distributor/index.php?id=$1
我通过 phpinfo() 确认 mod_rewrite 已全部设置/启用,所以不确定我遗漏了什么?
答案1
...我的 .htaccess 文件在分发者文件夹中
RewriteRule ^distributor/([0-9]+)$ distributor/index.php?id=$1
如果.htaccess
文件实际上位于/distributor
目录中,那么您不应该distributor
引用RewriteRule
图案。这与包含该文件的目录相关的 URL 路径进行匹配.htaccess
。
同样,您不应将distributor
目录包含在相对目录中代换目录内的字符串/distributor
。相对代换再次与包含该文件的目录相关.htaccess
。
您的现有.htaccess
文件的写入方式好像位于文档根目录中,而不是/distributor
所述的子目录中。
然而,你也引用了“分发or”和“分发埃r”——我认为“e”是拼写错误,但这显然也会导致匹配失败。
并且,正如@TeroKilkanen 的回答中所提到的,您在正则表达式中匹配的是数字,而不是字母,就像您的示例 URL 一样。
因此,您现有的规则是匹配形式的 URL/distributor/distributor/123
并重写为/distributor/distributor/index.php?id=123
。
在文件中尝试执行以下操作/distributor/.htaccess
:
RewriteRule ^(\w+)$ index.php?id=$1 [L]
简写\w
字符类匹配数字和字母,相当于字符类[0-9a-zA-Z_]
。
答案2
您的RewriteRule
匹配仅包含数字,即distributor/3728
等。它不匹配abcinc
。
从id
传递给index.php
它的参数来看,您的应用程序似乎需要的是 ID,而不是名称。您需要检查应用程序如何设置它来处理名称。