繁体   English   中英

mod_rewrite添加斜杠并传递给index.php

[英]mod_rewrite add trailing slash and pass to index.php

当我请求我的网站时,我试图在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/contact)时php始终会输出http://mydomain.com/index.php 因此,以某种方式将http://mydomain.com/index.php作为参数而不是诸如contact之类的请求页面进行了传递,但是我不知道为什么...

另外,当我编辑

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

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

然后输入URL,例如mydomain.com/contact Apache给了我302 Found以及指向它的移动位置的链接,但是它链接到同一页面...

有任何想法吗?

谢谢。

Apache为此专门编写了很长的文章。

尾部斜杠问题

每个网站管理员都可以唱一首关于目录引用URL末尾斜杠问题的歌曲。 如果缺少它们,服务器将转储错误,因为如果您说/〜quux / foo而不是/〜quux / foo /,则服务器将搜索名为foo的文件。 而且由于该文件是目录,因此会抱怨。 实际上,在大多数情况下,它会尝试自行修复它,但是有时您需要模仿此机制。 例如,在您对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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM