我一直在尝试实施mod-rewrite来清理我的网址。我以前从未这样做过。
以下是我的一个网址示例:
http://www.example.com/listings.php?category=Accident%20and%20Crash%20Repairs
listings.php 文件位于我网站的根目录。
我已经测试过在我的服务器上启用了mod-rewrite并且发现它正常工作。
从空白文件开始我试图创建一个.htaccess文件来重写我的网址。这是我到目前为止所尝试的:
RewriteEngine On
RewriteRule ^([^/]*)\.html$ /listings.php?category=$1 [L]
RewriteEngine On
RewriteRule ^/listings.html$ /listings.php?category=Accident%20and%20Crash%20Repairs [L]
在下一个例子中,我只是试图根据堆栈溢出的另一个查询的答案松散地改变url的部分。
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteBase /
RewriteRule ^lineage/?$ listings.php [NC,L]
</IfModule>
我尝试了很多组合并遵循了一些教程。不用说没有任何效果。
如果可能,我希望网址显示为:
http://www.example.com/listings/accident-and-crash-repairs
但如果不是,我会满足于根本没有看到变量。
任何人都可以指出我出错的地方或帮助我以任何方式解决这个问题吗?
非常感谢。
答案 0 :(得分:1)
通过httpd.conf
启用mod_rewrite和.htaccess,然后将此代码放在.htaccess
目录下的DOCUMENT_ROOT
中:
Options +FollowSymLinks -MultiViews
# Turn mod_rewrite on
RewriteEngine On
RewriteBase /
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/+listings/[^\?\s%20]+\s [NC]
RewriteRule ^listings/([^-]+)-([^-]+)(.*)$ listings/$1\%20$2$3 [L,NC]
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/+listings/[^\?\s%20]+\s [NC]
RewriteRule ^listings/([^-]+)/?$ listings.php?category=$1 [L,NC,QSA]
RewriteCond %{QUERY_STRING} ^(category)=([^%20]+)%20([^%20]+)(.*)$ [NC]
RewriteRule ^(listings\.php)/?$ $1?%1=%2-%3%4 [R=302,L,NC,NE]
RewriteCond %{QUERY_STRING} ^category=([^\s%20]+)$ [NC]
RewriteRule ^(listings)\.php/?$ $1/%1? [R=302,L,NC,NE]
一旦这个基于递归的规则到位,/listings/accident-and-crash-repairs
的URI将被转发到/listings.php?category=accident%20and%20crash%20repairs
/listings.php?category=accident%20and%20crash%20repairs
的URI将从外部重定向到/listings/accident-and-crash-repairs
。
验证工作正常后R=302
改为R=301
。