2014-10-31 239 views
2

我会诚实地说我对.htaccess的经验很少,因为我一直想尽我所能远离它。不过,我最近想收拾我的网址,我发现可以通过.htaccess并重写。.htaccess url重写不起作用?

基本上,我想重写像一个网址:

www.mysite.com/profile.php?id=48194

喜欢的东西:

WWW .mysite.com/profile/48194

这里是我有currentl的代码Y:

RewriteEngine on 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME}\.php -f 
RewriteRule ^(.*)$ $1.php 
RewriteRule ^profile/(.*)/$ profile.php?id=$1 

我试图使用该生产线是在最底部,RewriteRule ^profile/(.*)/$ profile.php?id=$1。其余部分用于从网址中删除附加页面。我已经将$1更改为$2,认为它可能与上述代码冲突,但没有任何变化。

我还删除了除RewriteEngine on之外的所有代码,最后一行认为代码可能存在冲突,但再次没有任何更改或工作。其余的代码确实有效,从urls中删除了扩展,所以我知道重写的东西已经开启。

有人可以尝试分解并解释我做错了什么,以及这是如何工作的?以及提供我想要完成的事情的工作示例?

在此先感谢!

回答

0

更改您的规则的顺序并使用MultiViews选项。选项MultiViewsApache's content negotiation module使用,它在mod_rewrite之前运行,并且使Apache服务器匹配文件扩展名。所以/file可以在URL中,但它将服务/file.php

RewriteEngine on 
RewriteBase/

RewriteRule ^profile/([^/]+)/?$ profile.php?id=$1 [L,QSA,NC] 

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

对不起,迟了回复,最近忙着一份新工作。感谢你的回答! – Neytorokx 2014-11-26 18:49:53

+0

没有问题,很高兴它解决了。 – anubhava 2014-11-26 18:52:00