0

当我请求我的网站时,我试图在 URL 中添加斜杠,然后使用 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

我输入 URL,例如mydomain.com/contactApache 给了我 302 Found 和一个指向它被移动的位置的链接,但它链接到同一个页面......

有任何想法吗?

谢谢。

4

1 回答 1

1

Apache 对此有一篇很好的长篇文章。

斜线问题

每个网站管理员都可以为引用目录的 URL 的尾部斜线问题唱一首歌。如果它们丢失,服务器会转储一个错误,因为如果你说 /~quux/foo 而不是 /~quux/foo/ 那么服务器会搜索一个名为 foo 的文件。而且因为这个文件是一个它抱怨的目录。实际上,在大多数情况下,它会尝试自行修复,但有时您需要模拟这种机制。例如,在您对 CGI 脚本等进行了大量复杂的 URL 重写之后。解决方案:

这个微妙问题的解决方案是让服务器自动添加尾部斜杠。要正确执行此操作,我们必须使用外部重定向,以便浏览器正确请求后续图像等。如果我们只进行内部重写,这仅适用于目录页面,但当任何图像包含在此页面中时会出错使用相对 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

于 2012-07-27T14:15:12.163 回答