403禁止您无权访问 - mod_rewrite

时间:2018-04-06 13:42:59

标签: php apache .htaccess mod-rewrite httpd.conf

好的,所以我到处寻找答案,但这似乎不是其他人所遇到的类似问题。

来自.htaccess

RewriteRule ^(.*)-p-(.*)\.html$ index\.php?main_page=product_info&products_id=$2&%{QUERY_STRING} [L]

以上规则适用于此网址:

https://www.example.com/seo-page-name-p-341.html

但是这个给了我403错误:

https://www.example.com/seo-page-name-p-341:6662cd9f4515a07efd25ef413b81846f.html

这是没有重写的页面:

https://www.example.com/index.php?main_page=product_info&products_id=341:6662cd9f4515a07efd25ef413b81846f

我做错了什么?

谢谢! 大卫

1 个答案:

答案 0 :(得分:1)

因此,经过进一步的研究,我发现由于NTFS惯例,冒号在Windows版本的Apache上是一个不允许的字符。我改为选择使用加号'+'字符。我只是在购物车软件中重写了相应的PHP输出:

https://www.example.com/seo-page-name-p-341+6662cd9f4515a07efd25ef413b81846f.html

然后,在.htaccess中,我补充道:

RewriteRule ^(.*)-p-([^\+]+)\+(.*)\.html$ index\.php?main_page=product_info&products_id=$2:$3&%{QUERY_STRING} [L]

这会将值拆分并用冒号重新组合,以将其反馈给期望它的PHP。如:

https://www.example.com/index.php?main_page=product_info&products_id=341:6662cd9f4515a07efd25ef413b81846f

希望我只需要在Windows(测试)服务器上执行此操作,并且在Unix Apache上应该是不必要的,来部署时间。