我是htaccess的新手,我几个小时都在搜索任何解决方案。到目前为止没有任何作这里有什么问题?
Options +FollowSymLinks
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^ index.php [L]
RewriteRule ^articles/([^/.]+)/?$ articles.php?topic=$1 [L]
</IfModule>
我也尝试过:
RewriteRule ^ articles/$ articles.php?topic= [L]
还有很多其他规则。
如果我将第4行更改为(删除空格):
RewriteRule ^index.php [L]
它给我找不到错误。
如果我改变第5行:
RewriteRule ^ articles/$ articles.php?topic= [L]
它提供了坏标志分隔符。
我正在使用MAMP。 谢谢!
编辑:第一条规则来自本教程: http://forum.codecall.net/topic/74170-clean-urls-with-php/
我试图添加第二个来改变这个:
... site / articles.php?topic = historical-background
对此:
... site / articles / historical-background
但没有任何反应或者我得到上述错误之一。
编辑2:
我的索引文件:
include('template/header.php');
include('views/'page.php');
include('template/footer.php');
page.php(在root / views文件夹中):
...
if ($page['id'] == 15) { ?> // id of articles page
<div class="content_container"> <?php
include('views/articles_list.php');
?>
</div>
<?php
}
...
articles_list.php(在root / views文件夹中)。它显示文章列表:
...
while($row = mysqli_fetch_array($result))
{
?>
<h2><?php echo $row['title']; ?></h2>
<p><i><?php echo 'By '.$row['author']; ?></i></p>
<p><?php echo $row['header']; ?></p>
<a href="http://localhost/site/articles.php?topic=<?php echo $row['slug'] ?>">Read</a><br> //I get to article.php from here.
<hr>
<?php
}
?>
...
articles.php位于根文件夹中。它显示了所选的文章。 htaccess也在根本。
答案 0 :(得分:0)
您似乎需要在此处停用MultiViews
并重新排列规则:
Options +FollowSymLinks -MultiViews
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{THE_REQUEST} \s/+articles\.php\?topic=([^\s&]+) [NC]
RewriteRule ^ articles/%1? [R=302,L,NE]
RewriteRule ^articles/([^/.]+)/?$ articles.php?topic=$1 [NC,L,QSA]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^ index.php [L]
</IfModule>
在MultiViews
之前运行的Apache's content negotiation module
使用选项mod_rewrite
,并使Apache服务器匹配文件扩展名。因此/file
可以在网址中,但它会投放/file.php
。