【发布时间】:2017-05-19 08:41:25
【问题描述】:
我尝试在网站上关注许多答案,但没有成功。 我正在尝试重写:
domain.com/articles/<author>
收件人:
domain.com/articles/index.php?author=<author>
我目前的规则是:
RewriteRule ^(\w*)$ /articles/index.php?author=$1 [B]
这适用于字母或数字,但不适用于 א 和 " 等 unicode 字符。
对于 א,我收到以下错误:
找不到对象!
在此服务器上找不到请求的 URL。如果您输入了 URL 请手动检查您的拼写,然后重试。
如果您认为这是服务器错误,请联系网站管理员。
错误 404
localhost Apache/2.4.23 (Win32) OpenSSL/1.0.2h PHP/7.0.9
对于":
禁止访问!
您无权访问请求的对象。它是 服务器读保护或不可读。
如果您认为这是服务器错误,请联系网站管理员。
错误 403
localhost Apache/2.4.23 (Win32) OpenSSL/1.0.2h PHP/7.0.9
我两个都需要。
编辑:
在阅读@user82217 评论后,我再次尝试了 (.*) 正则表达式,这次使用 END 标志,如下所示:
RewriteRule (.*) /articles/index.php?author=$1 [END]
现在 א 案例正在被很好地解释。但是 " 的情况还是会报同样的错误(Access Forbidden)。
@user82217 建议调查日志。对于 " 情况,日志为:
无法将 GET /articles/%22 HTTP/1.1 映射到文件
结论:
正如@user82217 在评论中所说,在 Windows 操作系统下,带有 " 字符的地址似乎被视为非法文件,尽管该地址根本不是文件。 所以我暂时放弃了 " 案子。很高兴听到是否有办法解决这个问题。
【问题讨论】:
-
你需要这么具体,你能匹配everything ie。
(.*)? -
@user82217:我试过了。然后我得到:“内部服务器错误”。
-
刚刚测试了这个场景。它确实有效,但仅在虚拟主机非目录上下文中有效。将您的规则放在
<VirtualHost>中,您将获得所有这些 unicode 和双引号。 -
RewriteRule ^/articles/(?!index\.php)(.*)$ /articles/index.php?author=$1 [END] -
@Deadooshka 只能用 .htaccess 文件吗?
标签: apache .htaccess mod-rewrite unicode