.htaccess - "友好的网址" (蛞蝓)

时间:2016-05-23 10:08:11

标签: php apache .htaccess

我正在尝试创建一个到localhost子目录的slugs。

我有这个.htaccess代码:

Options +FollowSymLinks -MultiViews
RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteBase ^subdirectory/

RewriteRule ^subdirectory/search/([a-zA-Z0-9]+)/$ subdirectory/search.php?q=$1 [L,R=301]
RewriteRule ^subdirectory/page/([a-zA-Z0-9]+)/([a-zA-Z0-9]+)/$ subdirectory/page.php?page_name=$1&page_id=$2 [L,R=301]

在search.php和page.php中我有以下代码:

的search.php

<?php $q = $_GET[ 'q' ]; ?>

page.php文件

<?php
    $page_name = $_GET[ 'page_name' ];
    $page_id   = $_GET[ 'page_id' ];
?>

但由于某种原因,它每次只发出404错误,如果它没有,它可以工作 - 但是在父目录中(&#34; localhost&#34;,&#34; www&#34; )

我已经搜索过很多但尚未找到任何解决方案。

mod_rewrite已启用,AllowOverride All

也已启用

使用wamp服务器(v.2.5),apache 2.4.9

谢谢大家。

1 个答案:

答案 0 :(得分:0)

我相信你的.htaccess规则有几个问题。

首先,RewriteBase应该设置根路径,这样您就不必在每个规则中重新指定它。换句话说,RewriteBase /subdirectory/表示您不必在实际的RewriteRule语句中包含subdirectory

其次,您的规则以/$结尾,这意味着它需要在网址上使用尾部斜杠。你可以使它成为可选项,跳过它或者有一个单独的规则来重写所有URL而不用斜杠。

如果你在.htaccess文件中相应地修改了RewriteBase和相对网址,你可以使用/ search / foobar /和/ page / foo / bar /来使其正常工作:

Options +FollowSymLinks -MultiViews
RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteBase /subdirectory/

RewriteRule ^search/([a-zA-Z0-9]+)/$ search.php?q=$1 [L,R=301]
RewriteRule ^page/([a-zA-Z0-9]+)/([a-zA-Z0-9]+)/$ page.php?page_name=$1&page_id=$2 [L,R=301]

PS。您可能还想删除301,因为它实际上将用户重定向到.php文件路径。