Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.htaccess mod#u rewrite不';事实上。。。重新写入URL_.htaccess_Mod Rewrite - Fatal编程技术网

.htaccess mod#u rewrite不';事实上。。。重新写入URL

.htaccess mod#u rewrite不';事实上。。。重新写入URL,.htaccess,mod-rewrite,.htaccess,Mod Rewrite,基本上,我一直在尝试使用mod_rewrite通过.htaccess创建一些友好的URL,我已经设法让它工作了。。。但只有基本的东西,如: RewriteEngine On RewriteBase / RewriteRule ^profile.php http://www.google.co.uk [L] 所以mod_rewrite可以工作,我可以重新定向到其他站点、服务器中的其他文件/目录等-但当我使用此选项时,它似乎不起作用: RewriteEngine On RewriteBase

基本上,我一直在尝试使用mod_rewrite通过.htaccess创建一些友好的URL,我已经设法让它工作了。。。但只有基本的东西,如:

RewriteEngine On 
RewriteBase / 
RewriteRule ^profile.php http://www.google.co.uk [L]
所以mod_rewrite可以工作,我可以重新定向到其他站点、服务器中的其他文件/目录等-但当我使用此选项时,它似乎不起作用:

RewriteEngine On 
RewriteBase / 
RewriteRule ^profile.php?user=$1 ^profile/user/([^/]*)/$ [L]
在这方面的任何帮助都会很好,因为我在mod_rewrite方面相当差劲,但这是我需要学习的东西

干杯

错了

            ## rewriting from           to
RewriteRule ^profile.php?user=$1 ^profile/user/([^/]*)/$ [L]
应该是

            ## rewriting from           to
RewriteRule ^profile/user/([^/]+)$ profile.php?user=$1  [L]

将[L]更改为[R,L]以强制执行实际的HTTP重定向。否则,它只在内部进行重写(如果可能的话),这只会影响从URI到文件系统的映射。(请参见中[R]标志的说明。)

您当前的配置如下:

RewriteEngine On
RewriteBase /
RewriteRule ^profile.php?user=$1 ^profile/user/([^/]*)/$ [L]
重写规则中
交换了from和to参数

假设服务器上有如下目录结构:

/var/www/htdocs/profile/user/albert
/var/www/htdocs/profile/user/bob
然后可以使用以下规则:

RewriteCond ${QUERY_STRING} ^user=(\w+)$
RewriteRule ^profile\.php$ profile/user/%1 [L]
这里有几点你弄错了:

  • 对“/profile.php?user=bob”的请求首先被拆分为请求URI和查询字符串。
    mod\u rewrite
    将仅使用请求URI。因此,必须单独处理查询字符串
  • 我将用户名限制为仅
    [A-Za-z0-9.]
    。如果我允许所有字符,攻击者可以轻松调用
    /profile.php?user=../../config.php
    ,这将被重写为
    profile/user/../../config.php
    ,您可能不想与世界共享该文件
  • RewriteRule
    指令的参数在语法上完全不同。
    • 第一个参数(from部分)是一个正则表达式,它通常以插入符号开头,以美元结尾
    • 第二个参数(to部分)是替换,它几乎只是一个简单的字符串,只有一些特殊的特性。此字符串通常不以插入符号开头,但看起来更像路径名

告诉过你我是n00b的:P还有,这对我来说似乎仍然不起作用,这很烦人。@Matt:你想访问什么url?我正试图从:profile.php?user={USERNAME}重定向到:/profile/user/{USERNAME]@Matt:你到底想访问什么url?对。我想要这样,当浏览器被导航到“profile.php?user={USERNAME}”时,而不是在浏览器中看到该URL,而是看到“/profile/users/{USERNAME}”。