如何在.htaccess中为'pagename / id'设置重写规则?

时间:2013-11-26 08:53:34

标签: php apache .htaccess mod-rewrite

我在.htaccess中使用了以下代码,

Options +FollowSymlinks
RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.+?)/?$ $1.php [L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^user-projects/([0-9]+)/?$ user-projects.php?uid=$1 [L,QSA]

以上代码适用于网址 mydomain.com/pagename ,但如果网址如 mydomain.com/user-projects/1 ,则会显示' 500内部服务器错误'

有人能告诉我我在哪里做错了吗?

感谢。

2 个答案:

答案 0 :(得分:2)

您收到500错误的原因是因为您应用的第一条规则是盲目地将.php扩展名添加到不是文件的任何内容中。所以/user-projects/1/匹配第一个规则,并在最后添加一个php扩展,然后再次发生同样的事情。

您应该交换两个规则的顺序,或者使您的php扩展规则更精确:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} ^/(.+?)/?$
RewriteCond %{DOCUMENT_ROOT}/%1.php -f
RewriteCond ^(.+?)/?$ $1.php [L]

首先检查如果你将.php添加到最后,它实际上指向一个存在的文件。

答案 1 :(得分:0)

您的规则结尾处有一个转发符号,因此它将匹配

mydomain.com/user-projects/1/

但不是

mydomain.com/user-projects/1

您也不需要问号,因此正确的规则是

RewriteRule ^user-projects/([0-9]+)$ user-projects.php?uid=$1 [L,QSA]