2012-07-27 33 views
0

当我请求我的网站时,我试图向URL添加尾部斜线,然后使用mod_rewrite将其作为参数传递给index.php。mod_rewrite添加尾部斜线并传递给index.php

的.htaccess文件看起来像这样:

RewriteEngine On  

#Add trailing slash 
RewriteCond %{REQUEST_URI} !(.*)/$ 
RewriteRule ^(.*)$ /$1/ [R] 

#Pass to index.php 
RewriteRule ^(.*)/$ index.php?p=$1 

在我的index.php文件只输出参数:

<?php echo $_GET["p"]; ?> 

但是当我输入的地址栏中除了http://mydomain.com/,例如http://mydomain.com/contactphp始终输出http://mydomain.com/index.php。所以http://mydomain.com/index.php在某种程度上作为参数,而不是请求的页面,如contact过去了,但我不知道为什么......

此外,当我编辑

RewriteRule ^(.*)/$ index.php?p=$1 

RewriteRule ^(.*)/$ /index.php?p=$1 

和我键入网址例如mydomain.com/contact Apache给我302找到并找到它被移动到的位置的链接,但它链接到同一页面...

任何想法?

谢谢。

回答

1

对于这个问题,Apache有很长的篇幅。

尾随斜线问题

每一个网站管理员可以唱有关的URL引用目录后缀斜杠的问题首歌。如果它们丢失了,服务器会抛出一个错误,因为如果你说/〜quux/foo而不是/〜quux/foo /,那么服务器搜索一个名为foo的文件。并且因为这个文件是一个它抱怨的目录。实际上,它试图在大多数情况下解决它自己,但有时候这种机制需要你模拟。举例来说,你已经做了很多复杂的URL的重写后的CGI脚本等 解决方案:

这个微妙问题的方案是让服务器自动添加后缀斜杠。为了正确地做到这一点,我们必须使用外部重定向,以便浏览器正确地请求后续图像等。如果我们只进行了内部重写,这只适用于目录页面,但是当任何图像包含在此页面时会出错与相对URL,因为浏览器会请求一个内联对象。例如,在/ ~quux/foo/index.html中对image.gif的请求将变为/ ~quux/image.gif,而无需外部重定向!

So, to do this trick we write: 

RewriteEngine on 
RewriteBase /~quux/ 
RewriteRule ^foo$ foo/ [R] 

疯狂和懒惰甚至可以在其homedir的顶级.htaccess文件中执行以下操作。但请注意,这会造成一些处理开销。

RewriteEngine on 
RewriteBase /~quux/ 
RewriteCond %{REQUEST_FILENAME} -d 
RewriteRule ^(.+[^/])$   $1/ [R] 

它可以在这里找到:

http://httpd.apache.org/docs/2.0/misc/rewriteguide.html

+1

“如果尾随斜杠]丢失,服务器转储错误:”你说的肯定是Windows服务器,因为Linux下这两种情况下是相同的:'cd/home' =='cd/home /'(对于URL也是一样的) – feeela 2012-07-27 14:19:26

+0

我用'DirectorySlash Off'指令关闭了自动shash添加,但是重写仍然不起作用。 。 – longaster 2012-07-27 14:26:56