[英]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]
在这里能找到它:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.