我在网站上搜索了这个问题,但我找不到解决方案。
我有一个php页面,打电话 http://www.domain.com/topic.php?name=xyz
我想用这个页面来打电话 http://www.domain.com/topic/xyz
我尝试的是什么;
RewriteEngine On
RewriteRule ^ topic /([^ /] *)$ /topic.php?name=$1 [L]
但是由于这个“/”我得到404错误。如果我尝试“ - ”而不是“/”它可以工作。我想“/”将用户转发到文件夹“/ topic”,所以我需要一个解决方案来修复它。
答案 0 :(得分:1)
鉴于您的主题名称遵循模式([a-zA-Z0-9-_]+)
这一事实,以下情况应该有效 - 如果它与模式不匹配,它可能应该(并且您的工作是清理它以使其匹配),因为这是一个URL。
RewriteEngine On
RewriteRule ^topic/([a-zA-Z0-9-_]+).html$ topic.php?name=$1 [L]
注意:强>
在您的请求中,您说您希望网址如下所示:http://www.domain.com/topic/xyz
并且在.htaccess规则中,您最后尝试使用.html
编写它。如果您最后不想要.html
,则应执行以下操作:
RewriteEngine On
RewriteRule ^topic/([a-zA-Z0-9-_]+)$ topic.php?name=$1 [L]
答案 1 :(得分:1)
我找到了解决问题的方法。虽然有点晚了:)
我编辑我的.htaccess
Options +FollowSymLinks
RewriteEngine On
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteRule .* redirect.php [L]
如你所见,我创建了一个redirect.php。在这个文件中,我爆炸斜杠,然后使用if语句设置
$path = explode("/", $_SERVER['REQUEST_URI']);
switch ($path[1])
{
case 'topic': $_GET[name]=$path[2]; include('topic.php'); break;
}
正如你所看到设置$ _GET一样,代码并不帅,但它就像一个魅力! :)感谢所有人的帮助。
答案 2 :(得分:0)
再太无聊了。
我的.htaccess(摘自你的问题):
RewriteEngine on
RewriteBase /
RewriteRule ^topic/([^/]*)$ /topic.php?name=$1 [L]
我的话题.php:
<?php
var_dump($_GET);
请求:
http://localhost/topic/xyz
结果:
array(1) { ["name"]=> string(3) "xyz" }
所以它只适用于Apache 2.2.14
答案 3 :(得分:0)
我认为你需要逃避正斜杠,如下:
RewriteRule ^topic\/([^\/]*)$ topic.php?name=$1 [L]
在Bogdan的解决方案中,你在角色类之后缺少一个+,现在它只匹配一个角色:P
答案 4 :(得分:0)
如果您的AddHandler type-map var
中有httpd.conf
行,请尝试对其进行评论。
这可能看起来很奇怪,但是这个功能(不经常使用,但是在Apache“It Worked!”页面的默认httpd.conf
中启用)已经让我在过去的类似路线上感到悲伤。
这与你有一个文件“topic.php”的事实有关,而Apache允许你像“topic / en-us”那样调用它。或类似的东西。您必须look up the feature in the Apache docs才能获得具体信息;我只是想要记忆。