.htaccess mod_rewrite没有捕获整个URL

时间:2012-11-25 11:54:12

标签: php .htaccess mod-rewrite

htaccess文件

RewriteEngine On
RewriteRule ^(.+)$ index.php?url=$1 [PT,L]

无论我添加到URL中,mod_rewrite会捕获它并将GET变量url放入其中,并将后台用户重定向到我的index.php页面。

示例:

http://www.mysite.com/members/profile

在我的index.php页面中,如果我然后将url参数输出到我得到的屏幕

members/profile

这就是我想要的,但问题是当我向URL添加这样的内容时:

members/profile##

OR

members/profile...

并且可能只有大量其他特殊字符mod_rewrite似乎只能抓住:

members/profile

出于某种原因将字符留在最后。

我不希望这样,因为我需要捕获URL中的每个字符。有谁知道为什么它没有捕获整个URL?感谢。

1 个答案:

答案 0 :(得分:1)

我使用包含以下内容的.htaccess文件测试了您的代码:

RewriteEngine On
RewriteRule ^(.+)$ index.php?url=$1 [PT,L]

这个PHP脚本名为index.php

<?php
echo '$_GET[\'url\'] = "' . $_GET['url'] . '"';
?>

确实,它没有用。但没有任何效果,甚至没有你所描述的事情。那么为什么会这样呢?好吧,除非你添加一个标志:QSA,否则Apache不会将GET参数传递给脚本。因此,如果您将.htaccess文件更改为:

,则代码将有效
RewriteEngine On
RewriteRule ^(.+)$ index.php?url=$1 [PT,L,QSA]

您遇到的一个问题是主题标签未传递给PHP脚本。不幸的是,这是你无法解决的问题。这样做的原因是,从第一个哈希开始的每个字符都不会被浏览器传递给Web服务器。因此,除非你使用一些奇特的JavaScript,否则你永远无法获得这些角色。