【发布时间】:2017-05-29 19:08:45
【问题描述】:
这是我的 htaccess 文件,出于某种原因,这条规则:RewriteRule ^profile/([^/]+)$ ./profile.php?name=$1 不允许链接中的点。它允许任何其他符号,但不允许点 (.)。我该如何解决这个问题?
Options -MultiViews -Indexes
RewriteEngine On
RewriteCond %{HTTP:VIA} !^$ [OR]
RewriteCond %{HTTP:FORWARDED} !^$ [OR]
RewriteCond %{HTTP:USERAGENT_VIA} !^$ [OR]
RewriteCond %{HTTP:X_FORWARDED_FOR} !^$ [OR]
RewriteCond %{HTTP:PROXY_CONNECTION} !^$ [OR]
RewriteCond %{HTTP:XPROXY_CONNECTION} !^$ [OR]
RewriteCond %{HTTP:HTTP_PC_REMOTE_ADDR} !^$ [OR]
RewriteCond %{HTTP:HTTP_CLIENT_IP} !^$
RewriteRule ^(.*)$ - [F]
DirectorySlash On
ErrorDocument 404 /404.php
ErrorDocument 403 /404.php
ErrorDocument 502 /brb.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l
RewriteCond %{REQUEST_URI} (.+)/$
RewriteCond %{THE_REQUEST} /profile\?name= [NC]
RewriteRule ^ - [L]
RewriteRule ^profile/([^/]+)$ ./profile.php?name=$1
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteRule ^([^/.]+)\.php - [F,L,R=404]
RewriteRule ^([^/.]+)$ $1.php [L]
在我的网站上,用户可以使用任何名称(因此任何字符)进行注册。 但是,假设我将我的虚构名称设置为“Mr.BoogieMan。”,指向我的个人资料的链接应该是 www.website.com/profile/Mr.BoogieMan。但由于点是我的名字,htaccess 不会让它通过。
【问题讨论】:
-
/profile/重定向是否有效?例如,http://www.website.com/profile/noDOThere/是否按预期工作? -
是的。它按预期工作。
-
新策略:为什么您认为问题出在您的 htaccess 重写规则中?您的规则中没有任何内容可以与点交互。是不是你的 PHP 有问题?
-
因为当我回显 get 参数时,我不会在回显中得到一个点。
-
这是一个完全不同的问题!这很高兴知道,因为这意味着我们越来越近了。您在 profile.php 中的 $name 中获得“MrBoogieMan”这一事实意味着重定向正在工作。你能打开重写日志吗?这将是确定问题出在 Apache 还是 PHP 中的最佳方法。如果您打开重写日志并访问“Mr.BoogieMan”,您应该会看到一个带有点或不带点的日志条目。带点表示您的问题出在 PHP 中,没有点表示问题出在最后一条规则之外的其他规则中。
标签: php apache .htaccess mod-rewrite