重写的问题我无法弄清楚

时间:2015-12-10 22:42:08

标签: apache .htaccess mod-rewrite url-rewriting

我试图让我的链接更加用户友好,现在就像

http://localhost/messages/?s=whatever
to
http://localhost/messages/whatever

但是只有首先出现的RewriteRule才有效,所以现在只有消息可以使用其他所有给我Internal Server Error。但是,如果我将RewriteRule ^users/([^/]*)$ /users/index.php?s=$1 [L,QSA,NC]置于消息重写规则之上,则仅转到/users/view

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^messages/([^/]*)$ /messages/index.php?s=$1 [L,QSA,NC]
RewriteRule ^users/([^/]*)$ /users/index.php?s=$1 [L,QSA,NC]
RewriteRule ^notes/([^/]*)$ /notes/index.php?s=$1 [L,QSA,NC]
RewriteRule ^posts/([^/]*)$ /posts/index.php?s=$1 [L,QSA,NC]

1 个答案:

答案 0 :(得分:1)

你的问题是你的rewriteRules正在重写一个url回到自身。 例如正则表达式模式 ^ users /([^ /] *)$ 匹配/users/index.php并将其重写为/user/index.php,这就是为什么你得到500 ISE。< / p>

您需要在模式中排除点([^。/] *),以使目标路径与模式不匹配。

RewriteEngine On
RewriteRule ^messages/([^/.]*)$ /messages/index.php?s=$1 [L,QSA,NC]
RewriteRule ^users/([^/.]*)$ /users/index.php?s=$1 [L,QSA,NC]
RewriteRule ^notes/([^./]*)$ /notes/index.php?s=$1 [L,QSA,NC]
RewriteRule ^posts/([^/.]*)$ /posts/index.php?s=$1 [L,QSA,NC]