带有参数的url的.htaccess重写规则

时间:2013-10-30 12:39:37

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

另一个网址重写问题,道歉,但有点麻烦。

我已从文件中删除.php扩展程序:

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ $1.php

注意:[app/设置为公共目录]

注意:[Apache服务器]

目标

我想要的是URLs这样的话:

www.example.com/app/user/123代替www.example.com/app/user.php?id=123

我尝试过:RewriteRule ^user/([0-9]+)/?$ user.php?id=$1 [R=301,L,NC]但它只返回500 Internal Server Error

  • 这也会影响GETPOST个请求,还是需要对php进行编码以反映网址更改?

我遇到的链接

right order of rewrite rules in an htaccess file

http://corz.org/serv/tricks/htaccess2.php

http://www.workingwith.me.uk/articles/scripting/mod_rewrite

.htaccess RewriteRule to preserve GET URL parameters

加上许多其他人。

修改

删除.php的第一条规则会影响之后的规则吗?即阻止他们处理

1 个答案:

答案 0 :(得分:1)

规则的排序可能会导致此问题。请按正确的顺序尝试这些规则:

RewriteEngine On
RewriteBase /app/

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

# hide .php extension
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{DOCUMENT_ROOT}/app/$1.php -f
RewriteRule ^(.+?)/?$ /$1.php [L]