2011-04-08 40 views
1

这是我想达到的目标:需要用的.htaccess帮助隐藏PHP扩展,但在某些特定条件

www.mydomain.com/pages/23/page-title-hash-here -> www.mydomain.com/pages.php/23 
www.mydomain.com/[otherpages] -> www.mydomain.com/[otherpages].php 
www.mydomain.com/[otherpages]/ -> www.mydomain.com/[otherpages].php 

本质,但是也有一些仅由文件名(www.mydomain.com/contact or www.mydomain.com/faq)查询,然后有一些简单的网页是我通过使用pages.php/23/fdjsoipfahsd or products.php/54/gf-dsdfs-a-f来引用的页面,然后我使用$_SERVER['REQUEST_URI'] var来解析.php之后的所有内容,并检索产品ID或页面ID等。并且这些页面有很多变体。

If我需要对每个.php文件名进行硬编码,我也可以这样做 - 我们赢了将不再增加。然而没有任何痕迹的人仍然应该工作。

回答

2

你为什么不直接使用:

RewriteEngine On 
Options +MultiViews 

如果我的理解是正确的,它应该工作。 试试吧。

+0

哦,至今它的作用就像一个奇迹。天才!我会进一步测试以确认,然后分出积分! – jeffkee 2011-04-18 23:37:44

1

您可以尝试以下操作。它忽略对存在的文件的请求(例如'/images/image.jpg'将不受影响),对于那些不存在的文件,它会尝试将“.php”添加到第一个“目录”元素,如只要该'目录'只包含字母数字字符。

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} -f 
RewriteRule ^/([\w-]*)/?$ /$1.php [L] 
RewriteCond %{REQUEST_FILENAME} -f 
RewriteRule ^/([\w-]*)/(.*)$ /$1.php/$2 [L] 
  • /测试/ fred的/去 - > /test.php/fred/go
  • /images/image.jpg - 名> /images/image.jpg(假设该文件存在)
  • /script.php/request/thing - > /script.php/request/thing(因为开口 '目录' 中有一个点)
  • /测试 - > /test.php
+0

似乎到目前为止是工作。我会进一步测试... – jeffkee 2011-04-08 17:27:00

+0

如果我需要允许文件中带破折号( - )和下划线(_)的文件,该怎么办?如about-us或contact-us转到about-us.php和contact-us.php? – jeffkee 2011-04-11 22:25:04

+0

我已经更新了上面的规则,允许“ - ”和“_”成为初始'目录'的一部分。 – 2011-04-12 00:37:32

1

尝试这将帮助您达到您的要求:

RewriteEngine on 

RewriteCond %{REQUEST_URI} \/(pages|products)\/(.*) 
RewriteRule (.*)$ %1.php/%2 [L] 

RewriteCond %{REQUEST_URI} \/([a-z]+)([\/]?) 
RewriteRule (.*)$ %1.php [L] 
1
RewriteEngine On 
RewriteCond $1 !(.*\.php)$ 
RewriteRule ^/([^/]+)/?$ /$1.php 
RewriteCond $1 !(.*\.php)$ 
RewriteRule ^/([^/]+)/(.+)$ /$1.php/$2 [R=301] 

这些规则重写只有当文件不与.PHP结束。然后在第二种情况下,我使用.php文件设置了一个重定向301,就像在php文件中获取请求部分一样。如果没有R参数,脚本将找不到.php,并且您的请求字符串将为空,并且会显示默认页面(如果我是正确的)。

+0

同样的事情... http://picnetbc.sonikastudios.com/surveillance-research.php和http://picnetbc.sonikastudios.com/surveillance-research shoudl都可以工作,但事实并非如此。 – jeffkee 2011-04-15 21:26:13

+0

查看更新的答案。这是在我的本地机器上工作。 – 2011-04-16 12:08:07

1

尝试以下

  1. 重写规则^ /页/([^ /] +)/([^ /] +)/ $ /pages.php/$1
  2. 的RewriteRule^/(。 *)$ /$1.php
  3. RewriteRule^/(。*)/ $/$ 1。PHP