【问题标题】:403 Forbidden You don't have permission to access - mod_rewrite403 Forbidden 你没有访问权限 - mod_rewrite
【发布时间】:2018-09-16 13:34:49
【问题描述】:

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

来自 .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

我做错了什么?

谢谢! 大卫

【问题讨论】:

  • 您的 URL 中有一个冒号 (:),它为您提供 403,但在 RegEx 中没有。另外,我认为您不允许使用冒号。尝试使用另一个字符,例如连字符 (-),看看是否有效。
  • 对不起,我发布了错误的重写规则(现在在原始问题中进行了编辑)。是的,我发布的一个是不正确的,但这不是问题。这是我实际使用但仍然失败的规则: RewriteRule ^(.*)-p-(.*).html$ index\.php?main_page=product_info&products_id=$2&%{QUERY_STRING} [L] 如您所见,正则表达式捕获 -p- 之后的所有内容,并且不需要单独列出部分。但是,在我的解决方案中,我需要将它们单独列出,然后重新组合以将其反馈给需要冒号的 PHP。
  • 不过,您对冒号的看法是对的,谢谢 - 请看我的回答。

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


【解决方案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 上应该是不必要的,到部署时间来。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-09-08
    • 1970-01-01
    • 1970-01-01
    • 2019-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多