.htaccess simple.php的Mod_重写

.htaccess simple.php的Mod_重写,.htaccess,.htaccess,我想使用mod_rewrite在我的URL中显示漂亮的URL: 而不是 …/juegos/plant vs zombies/?play=jugar 改为 …/juegos/植物vs僵尸/jugar/ 及 …/juegos/ddtank/?播放=已满 改为 …/juegos/ddtank/full/ 我将文件“single.php”与以下代码一起使用: $url = (isset($_SERVER['HTTPS']) ? "https" : "http") . "://$_SERVER[HTTP_

我想使用mod_rewrite在我的URL中显示漂亮的URL:

而不是 …/juegos/plant vs zombies/?play=jugar 改为 …/juegos/植物vs僵尸/jugar/

及 …/juegos/ddtank/?播放=已满 改为 …/juegos/ddtank/full/

我将文件“single.php”与以下代码一起使用:

$url = (isset($_SERVER['HTTPS']) ? "https" : "http") . "://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";

$parts = parse_url($url);
parse_str($parts['query'], $query); 
$parametro = $query['play'];

if ($parametro == 'jugar')
{
    include( get_template_directory() . '/single-play.php');
}
else if ($parametro == 'full')
{
    include( get_template_directory() . '/single-full.php');
}
在.htaccess中,我有:

RewriteEngine On
RewriteCond %{QUERY_STRING} (^|&)play=jugar($|&)
RewriteRule ^(.*)/$ /jugar/?&%{QUERY_STRING}
但是,当我尝试在url末尾使用/jugar/和/full/获取url时,它会显示404错误


我不知道还能做什么。我希望你能帮助我。

听起来很直截了当:

RewriteEngine on
RewriteRule ^/?juegos/plants-vs-zombies/jugar/?$ /juegos/plants-vs-zombies/?play=1 [END]
显然,要使其工作,必须安装并启用重写模块。该规则同样适用于http服务器主机配置和动态配置文件(
.htaccess
)。如果决定使用动态配置文件,则需要将其放置在http hosts文档根文件夹中,并使用主机配置中的
AllowOverride
指令启用其解释

如果使用上述规则(“服务器内部错误”)收到http状态500,则很可能您操作的是非常旧版本的apache http服务器。在这种情况下,尝试将
[END]
标志替换为
[L]
标志


还有一个一般提示:您应该始终希望将此类规则放置在http服务器(虚拟)主机配置中,而不是使用动态配置文件(
.htaccess
样式文件)。这些文件是出了名的容易出错,难以调试,而且它们确实降低了服务器的速度。只有在您无法控制主机配置的情况下(读:非常便宜的主机服务提供商),或者如果您的应用程序依赖于编写自己的重写规则(这显然是一个安全噩梦),才支持将它们作为最后一个选项.

浏览器看到的内容
/juegos/plants vs zombies/jugar/

服务器所看到的
?play=juegos/plants vs zombies/jugar

 Options +FollowSymlinks
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ ?play=$1 [NC]
爆炸后,它会变成一个
数组([0]=>juegos[1]=>plants vs zombies/[1]=>jugar)

这将
$\u GET['play']
更改为数组

$play = explode("/", $_GET['play']);


 if(isset($_GET['play'])){
    $play = explode("/", $_GET['play']);

    //if you want to add `/` at the end
     if(end($play) == ""){
        array_pop($page);
    }
 }

Mod_rewrite的可能副本在PHP includes上不起作用。如果Mod_rewrite在PHP includes上不起作用,您知道加载自定义post文件的其他方法吗?这取决于文件single.PHP是否接收到参数“play”?如果它显示404错误。这意味着它认为full和jugar是目录@Fernando Lozano Hernándezdo你是否尝试过这个@Fernando Lozano Hernándezdo重写模块的工作,还有为什么你要使用
模板路径
@Fernando Lozano Hernándezdo你想
?play=1
被视为
jugar
@FernandoI使用TEMPLATEPATH加载不同的自定义post文件(如果url有?play,则加载“single play.php”,如果url没有任何内容,则加载“single clic.php”。这就是为什么在single.php中我有以下代码:if(isset($\u GET['play']){include(TEMPLATEPATH./single play.php');}else{include{include(TEMPLATEPATH.'/single clic.php');}当我尝试使用此url加载页面时,总是会出现404错误:但使用此方法效果很好:但我想使用漂亮的url,我不想显示参数?在url中播放