解决mod_rewrite问题

时间:2012-06-03 10:22:34

标签: php apache mod-rewrite

我遇到了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

如果需要更多信息,请与我联系。

由于

3 个答案:

答案 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进行实验。