我正在尝试创建一个到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
谢谢大家。
答案 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文件路径。