1

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

我已经.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需要编码以反映 url 更改?

我遇到的链接

htaccess 文件中重写规则的正确顺序

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

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

.htaccess RewriteRule 保留 GET URL 参数

加上许多其他人。

编辑

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

4

1 回答 1

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]
于 2013-10-30T12:55:13.347 回答