2009-08-06 51 views
1

对于我的网站,我有一个RewriteRule指向一个work.php文件的URL http://www.mysite.com/work。我也有一个名为“工作”的目录,其中包含文件,比如project1.php,project2.php等....htaccess将网址改写为页面或目录

我需要写什么规则才能让URL http://www.mysite.com/work知道要去工作.php文件,但URL http://www.mysite.com/work/project1知道我的意思是进入目录“工作”,并显示project1.php文件?

编辑:应该指出,这是我目前正在工作:

RewriteEngine On 
RewriteBase /beta/ 
RewriteRule ^([a-z]+)$ $1.php [L] 

任何额外的提示,以改善这种安全,明智? (停止目录跳跃,等...)

回答

4

试试这个:

RewriteEngin On 
RewriteBase/
RewriteRule ^work$ /work.php [QSA,L] 

这将确保http://www.mysite.com/work(没有尾随斜线)会去你的work.php文件。

如果您还想要http://www.mysite.com/work/(尾随斜线)去work.php,请在最后的RewriteRule之上添加此行。因此

RewriteRule ^work/$ /work [R=301,QSA,L] 

这将重定向到没有尾随的URL斜线,显示work.php文件。

UPDATE:既然你已经有了一个RewriteBase指令,只是把RewriteRule线(S)的RewriteBase之后但在此之前你RewriteRule作为规则你使用一个包罗万象的,并会匹配一切。

+0

你回答之前,我包括我目前的.htaccess文件,好像没有,如果我只是添加你的东西在工作,也许是与我目前有哪些? – roflwaffle 2009-08-06 08:29:06

+0

@Brandon,我更新了我的答案以匹配您的修订。 – matpie 2009-08-06 22:36:48

-1

试试这个规则:

RewriteCond %{REQUEST_FILENAME}.php -f 
RewriteRule .* $0.php [L] 
+0

什么问题? – Gumbo 2009-08-06 17:11:17

+0

我不是那个投了票的人,但我猜想原因是你的规则太过分了,会匹配存在的任何文件,而不仅仅是“/ work”,这是OP想要的。 – matpie 2009-08-06 22:41:32

0

这是回答你的问题。这个对我有用。

RewriteEngine On 
RewriteBase/
RewriteRule ^([a-z]+)$ $1.php [L] 

只需删除beta/