我遇到了apach mod_rewrite的问题。我想用我的php应用程序制作干净的网址,但它似乎没有给出我期待的结果。
我在.htaccess文件中使用此代码:
RewriteEngine on
RewriteRule ^project/([0-9]{4})/([0-9]{2})$ /project/index.php?q=$1&r=$2 [L]
RewriteRule ^project/([0-9]{4})$ /project/index.php?q=$1 [L]
为了在我查看http://localhost/user/project/system
时这样做,它将成为观看http://localhost/user/project/index.php?q=system
我没有得到任何结果,而是得到典型的404错误。
我还检查了mod_rewrite是否可以通过替换我的.htaccess代码:
Options +FollowSymLinks
RewriteEngine On
RewriteRule (.*) http://www.stackoverflow.com
它正确地将我重定向到这里,所以mod_rewrite绝对有效。
我项目的根路径是/home/user/public_html/project
用于查看我的项目的网址是http://localhost/user/project
如果需要更多信息,请与我联系。
由于
答案 0 :(得分:0)
你可能意味着
RewriteRule ^/project/([0-9]{4})/([0-9]{2})$ /project/index.php?q=$1&r=$2 [L]
RewriteRule ^/project/([0-9]{4})$ /project/index.php?q=$1 [L]
'^ project'的意思是“行的开头是'项目'',但是开头是'/ project',所以你需要包含起始斜杠(即'^ / project ...')。
抱歉,错过了系统位(和用户位)。专注于斜线。
RewriteRule ^/user/project/([a-zA-Z0-9]*)/([a-zA-Z0-9]*)$ /user/project/index.php?q=$1&r=$2 [L]
RewriteRule ^/user/project/([a-zA-Z0-9]*)$ /user/project/index.php?q=$1 [L]
应该没事。
答案 1 :(得分:0)
你的正则表达式中有[0-9] {4},只能匹配4位数。但是,“system”不是4位数,因此不匹配。
您可以使用类似[^ /] +的内容。
RewriteRule ([^/]+)/([0-9]{2})$ /index.php?q=$1&r=$2 [L]
RewriteRule ([^/]+)$ /index.php?q=$1 [L]
不知道第二个参数是否应该是2位数字。
编辑:我现在也在开头添加了“用户”。
Edit2:好的,我以为你和你的htaccess在根htdocs中。因此,如果您使用.htaccess进行“项目”,请删除“项目”和“用户”。
答案 2 :(得分:0)
如果您的.htaccess
文件确实位于project/
子目录中,那么请不要再次在RewriteRule中提及它。删除它:
RewriteRule ^([0-9]{4})/([0-9]{2})$ /project/index.php?q=$1&r=$2 [L]
# no "project/" here
规则始终与当前本地文件名映射有关。
使用RewriteBase进行实验。