Mod重写斜杠问题
我在网站中搜索了这个问题,但是我找不到解决方案。Mod重写斜杠问题
我有一个PHP页面,请拨打 http://www.domain.com/topic.php?name=xyz
我想打电话给这个页面 http://www.domain.com/topic/xyz
我试过是;
RewriteEngine叙述在
重写规则^话题/([^ /] *)$ /topic.php?name=$1 [L]
的但是因为这种 “/” 我得到404错误。如果我尝试使用“ - ”而不是“/”,它就会起作用。我猜“/”转发用户到文件夹“/ topic”,所以我需要一个解决方案来解决它。
我找到了解决问题的方法。这是一个有点晚,虽然:)
修改我的.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作为代码不帅,但它就像一个魅力! :)谢谢你的帮助。
太无聊了再猜。
我的.htaccess(从你的问题采取):
RewriteEngine on
RewriteBase/
RewriteRule ^topic/([^/]*)$ /topic.php?name=$1 [L]
我topic.php:
<?php
var_dump($_GET);
请求:
http://localhost/topic/xyz
结果:
array(1) { ["name"]=> string(3) "xyz" }
所以它只是工作在Apache 2.2.14
下面应该工作给你的主题名遵循模式([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
和你试图把它与.html
在最后写的.htaccess规则。如果你不想.html
在最后,你应该做到以下几点:
RewriteEngine On
RewriteRule ^topic/([a-zA-Z0-9-_]+)$ topic.php?name=$1 [L]
我尝试了,但我仍然收到同样的错误。我在想它是否与“AllowEncodedSlashes on”命令相关。 – 2011-04-24 22:39:01
在这种情况下,'[a-zA-Z0-9 -_]'和'[^ /]'没有明显的区别。你也错过了'*'(或'+')量词。 – zerkms 2011-04-24 22:39:42
@zerkms我刚才看到我错过了'+',所以它只会匹配一个字符。自我注意:昏昏欲睡时不要回答:) – 2011-04-24 22:43:06
我认为你需要协商的斜杠,像这样:
RewriteRule ^topic\/([^\/]*)$ topic.php?name=$1 [L]
而且在波格丹的解决方案你在字符类之后缺少+,现在它只匹配一个字符:P
仍然会变得404。 问题与painthesis中的/没有关系,它是第一个。 – 2011-04-24 22:46:10
为什么需要他? '/'在mod_rewrite中没有任何特殊的含义。 – zerkms 2011-04-24 22:47:06
因为如果我将代码修复为 “RewriteRule^topic - ([^ \ /] *)$ /topic.php?name=$1 [L]” 然后www.domain.com/topic-xyz工作。 – 2011-04-24 22:48:16
如果您的中有AddHandler type-map var
,请尝试将其注释掉。
这看起来很奇怪,但是这个功能(这个功能并不常用,但是在默认的httpd.conf
中为Apache“It Worked!”页面启用)已经引起了我过去类似的悲痛。
这与事实有关,你有一个文件“topic.php”,Apache允许你把它称为“topic/en-us”。或这样的东西。你必须去look up the feature in the Apache docs才能得到具体细节;我正要离开记忆。
我正在使用GoDaddy。所以对我来说没有希望,也许我应该接受一个事实,即我不能在我的网址中使用/。 – 2011-04-24 23:08:16
@Kenshi:http://nodaddy.com/ – 2011-04-24 23:40:21
感谢您的警告:)我会尽快逃脱。 – 2011-04-25 15:17:27
哪个“/”?你有几个。 – 2011-04-24 22:56:02
代码中的第一个。当我打电话给... com/topic/xyz时,它将指向“主题”文件夹并返回404。 – 2011-04-24 22:57:23
您的规则对我来说工作得很好。文件'topic.php'确实存在于根文件夹中吗? “.htaccess”是否位于根文件夹中? – ridgerunner 2011-04-24 23:24:30