2013-01-21 232 views
1

我以前改变了我的.htaccess文件,这样我的“子目录”(13 /),可以通过添加为“目录”我用我的主要领域:删除扩展名为.php

RewriteCond %{HTTP_HOST} ^(www.)?mydomain.com$ 
RewriteRule ^(/)?$ 13/index.php [L] 

现在我想以除去.php扩展和扩展名如index.php?eventid=3index/something

EDIT#1 [其中something是存储在数据库中id的名称]

我该怎么做? 以前,我曾在一些PHP框架中工作,但他们已经有专用的url文件。所以我从来没有想太多。但是这一次,我没有使用任何框架,所以我需要修改.htaccess

我环顾四周,但无法找到任何可靠的博客/资源。

编辑#2

我子目录是public_html/13/

www.mydomain.com重定向到www.mydomain.com/13/ 现在我要访问www.mydomain.com/13/events.php?eventid=1作为www.mydomain.com/events/44

回答

1
RewriteRule ^([A-Za-z0-9\-]+)/([A-Za-z0-9\-]+)/([0-9]+)/?$ $1.php?$2=$3 

上面的代码会重定向http://www.mydomain.com/index/eventid/3/http://www.mydomain.com/index.php?eventid=3

的htaccess是非常灵活的,并且上面创建的变化是一旦你理解了语法,这很容易。您需要阅读可以使用的正则表达式以及Rewrite模块必须提供的众多选项。我的大多数重定向看起来像上面那样,但很简单。

编辑:你要找的一个例子是Wordpress,它使用slu to基于比ID号更多的语义来识别页面。您必须对数据库中项目的名称进行url编码并将其作为段落存储在数据库中,或者找到使数据库查询中可用的其他方法来检索页面的内容。然后你的htaccess会是这个样子:

RewriteRule ^([A-Za-z0-9\-]+)/([A-Za-z0-9\-]+)/?$ $1.php?slug=$2 

在你的PHP,你将需要创建蛞蝓,并将它们存储在数据库中,使他们可以作为您的查询的ID。

EDIT2:试着改变你的整个htaccess文件,只是这样的:

<IfModule mod_rewrite.c> 
RewriteEngine on 

RewriteCond %{HTTP_HOST} ^www\.yourdomain\.com$ [NC] 
RewriteRule ^(.*)$ http://yourdomain.com/$1 [R=301,L] 

RewriteRule ^([A-Za-z0-9\-]+)/([A-Za-z0-9\-]+)/([0-9]+)/?$ $1.php?$2=$3 

</IfModule> 

我已经测试它和它的作品。你的htaccess中的其他东西正在搞乱它。

+0

雅。我在Python框架中使用它 - Django。那真的很简单。但是现在,我正在使用PHP,所以遇到了问题。我还想知道如何将我的'../ index.php?eventid = 3'部分更改为'../index/thateventname'',其中'thateventname'可以从数据库访问]。 – xan

+0

你的第一个代码(没有slug)没有工作。 如果我尝试'www.mydomain.com/events/eventid/8'而不是'www.mydomain.com/events.php?eventid = 8',它不会打开页面。 – xan

+0

这是因为我忘记了在最后一个斜线后面添加一个问号以使其成为可选项。虽然灵活,但htaccess也很严格。我上面编辑了我的代码。 – Eric

1

只需使用以下规则:

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

我编辑了一下我的问题。 – xan

+0

您的代码无法使用。我试过这个: 'RewriteRule ^(www。)mydomain.com/events.php?eventid=$1 [QSA,L]'打开'www.mydomain.com/events.php/?eventid = 5' – xan