使用htaccess用斜杠重构php url

时间:2017-01-27 16:24:25

标签: php apache .htaccess

我已经在几个星期前就同样的问题寻求帮助,但并没有真正有效的解决方案,所以我正在尝试另外修复它。

所以我有一个网址看起来像

website.com/proj1/post.php?id=130

但我想将网址重构为

 website.com/proj1/post/130

经过讨论,一个人建议使用以下htaccess规则

RewriteEngine on

RewriteCond %{REQUEST_FILENAME} -d [OR]
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^ - [L]

RewriteCond %{DOCUMENT_ROOT}/proj1/$1.php -f
RewriteRule ^([\w-]+)/([\w-]+)/?$ $1.php?id=$2 [L,QSA]

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

他说它在他的环境中工作,但我没有设法在xampp或我的真实服务器上工作?

你能确认代码有效吗?你知道为什么它对我不起作用吗?

为了记录,我已将hta​​ccess文件放在文件夹" proj1"中,因此它不在根目录下。

2 个答案:

答案 0 :(得分:0)

当你使用错误的backrefrences和RewriteConds时,你的rewriteRule看起来并不正确。您可以在proj1 / .htaccess

中使用以下规则
RewriteEngine on


RewriteRule ^post/([^/.]+)/?$ /proj1/post.php?id=$1 [L]

答案 1 :(得分:0)

如果您的固定路径前缀为/proj1/post,则足以捕获该号码并在替换中使用该号码

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

如果帖子和号码都是可变的,则必须单独捕获每个部分

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