正在构建一个博客系统,我在我的数据库中有一个名为url
的表a,它保存帖子标题,日期我还有一个名为index.php
的页面,显示来自数据库的所有数据,单击时会转到post.php
。问题是网址不是SEO友好site/post?url=seo-friendly-url.html/2017-09-29
,我有一个.htaccess文件,效果很好
`Options -MultiViews
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^ index.php [QSA,L]
RewriteRule ^post/([a-zA-Z0-9-/]+)$ post.php?url=$1
RewriteRule ^post/([a-zA-Z-0-9-]+)/ post.php?url=$1
`
但拒绝重写我的博文,我的索引超链接看起来像这个<a href='post?url=".$row['url']."'>
,试图将其重写为<a href='post/".$row['url']."'>
但是没有用,已经做了研究但仍没有进展,请任何非常感谢帮助,就像现在这个问题一样。
答案 0 :(得分:0)
在您网站的 VirtualHost 文件中添加AliasMatch(这将位于您的apache文件夹中)
这些是您需要在虚拟主机文件
中添加的行AliasMatch ^post/([a-zA-Z0-9-/]+)$ post.php?url=$1
AliasMatch ^post/([a-zA-Z-0-9-]+)/ post.php?url=$1
在基于linux的服务器上。虚拟主机将位于文件夹
中/etc/apache2/sites-enabled/
在此文件夹中找到您的网站虚拟主机文件并添加这两行
虚拟主机将具有与此类似的代码
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
#Add these two line only donot disturb any other lines
AliasMatch ^post/([a-zA-Z0-9-/]+)$ post.php?url=$1
AliasMatch ^post/([a-zA-Z-0-9-]+)/ post.php?url=$1
</VirtualHost>
在.htaccess文件中删除这两行
RewriteRule ^post/([a-zA-Z0-9-/]+)$ post.php?url=$1
RewriteRule ^post/([a-zA-Z-0-9-]+)/ post.php?url=$1
<强>加成强>
现在,如果您要将访问旧网址的用户(/post?url="old_url.html")重定向到新的友好网址(/post/old_url.html),请将其添加到你的.htaccess文件
RewriteRule ^post.php?url=([a-zA-Z0-9-/]+)$ post/$1
RewriteRule ^post.php?url=([a-zA-Z-0-9-]+)/ post/$1
如果您在虚拟主机文件中将所有行作为注释(所有行的#front),则将其添加到底部的虚拟主机
<VirtualHost *:80>
DocumentRoot "C:/xampp/htdocs"
AliasMatch ^post/([a-zA-Z0-9-/]+)$ post.php?url=$1
AliasMatch ^post/([a-zA-Z-0-9-]+)/ post.php?url=$1
</VirtualHost>
**
请记住在执行更改后重新启动Apache服务器
**