基本上,我一直在尝试使用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,但这是我需要学习的东西。
干杯!
答案 0 :(得分:0)
错误。
## rewriting from to
RewriteRule ^profile.php?user=$1 ^profile/user/([^/]*)/$ [L]
应该是
## rewriting from to
RewriteRule ^profile/user/([^/]+)$ profile.php?user=$1 [L]
答案 1 :(得分:0)
将[L]更改为[R,L]以强制实际的HTTP重定向。否则它只在内部进行重写(如果可能),这只会影响从URI到文件系统的映射。 (参见http://httpd.apache.org/docs/current/mod/mod_rewrite.html#rewriteflags处的[R]标志说明。)
答案 2 :(得分:0)
您的配置目前是:
RewriteEngine On
RewriteBase /
RewriteRule ^profile.php?user=$1 ^profile/user/([^/]*)/$ [L]
在RewriteRule
中,您将从和交换为参数。
假设您的服务器上有这样的目录结构:
/var/www/htdocs/profile/user/albert
/var/www/htdocs/profile/user/bob
然后您可以使用以下规则:
RewriteCond ${QUERY_STRING} ^user=(\w+)$
RewriteRule ^profile\.php$ profile/user/%1 [L]
有些观点你错了:
mod_rewrite
仅使用请求URI。因此,您必须单独处理查询字符串。[A-Za-z0-9_]
。如果我允许所有字符,攻击者可以轻松调用/profile.php?user=../../config.php
,这将被重写为profile/user/../../config.php
,您可能不希望与该世界共享该文件。RewriteRule
指令的参数在语法上完全不同。
^
开头,以美元$
结尾。