允许在url .htaccess中删除斜杠

时间:2013-12-19 16:04:40

标签: .htaccess mod-rewrite

我设置了一个网页,用户可以在其中导航到页面上的某个项目,如下所示:

www.example.com/models.php#DDD-34

目前它使用#符号来表示我想要链接到的项目的代码。是否可以使用.htaccess来设置/符号而不是#

所以代替以上链接到项目

www.example.com/models.php/DDD-34

无论如何这是否可行?因为/表示它带来404错误的路径。什么.htaccess代码允许这个?

2 个答案:

答案 0 :(得分:0)

当你整理这样的解决方案时,你需要考虑一些事情。 #是客户端元素,它永远不会作为请求的一部分发送到服务器。这意味着,即使您希望能够转到www.example.com/models.php/DDD-34,htaccess可以为您做的唯一事情就是将浏览器外部重定向返回www.example.com/models.php#DDD-34。而已。服务器不知道如何处理#DDD-34部分,因为这是浏览器上运行的javascript理解的内容。

如果你对浏览器的位置栏改回www.example.com/models.php#DDD-34没问题,那么这就是你需要的:

RewriteEngine On
RewriteRule ^models\.php/(.*)$ /models.php#$1 [L,R,NE]

答案 1 :(得分:0)

您可以在.htaccess文件中添加以下内容:

RewriteEngine On
RewriteRule ^models.php/(.*)$   /models.php?item=$1    [L,NC,QSA]

然后有一个服务器端脚本(比方说PHP)填写导航到该锚点所需的javascript:

<script> location.hash = "#" + <?=$_GET['item'];?>; </script>

<?=$_GET['item'];?>将使用PHP添加项目。 (注意:如果使用PHP,您可能希望使用以下内容进一步保护该段代码:<?=addslashes($_GET['item']);?>

另外,您可以使用Jon Lin的答案并结合使用 javascript to grab the hash item HTML5's pushstate 来实现您的目标希望不使用服务器端脚本。