1

我一直在尝试实现一个 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>

我尝试了更多组合并遵循了一些教程。不用说什么都没奏效。

如果可能的话,我希望 url 显示为:

http://www.example.com/listings/accident-and-crash-repairs

但如果不是,我会满足于根本看不到变量。

谁能指出我哪里出错或以任何方式帮助我解决这个问题?

非常感谢。

4

1 回答 1

1

通过启用 mod_rewrite 和 .htaccess httpd.conf,然后将此代码放在您.htaccessDOCUMENT_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]

一旦这个基于递归的规则到位,一个 URI/listings/accident-and-crash-repairs将被转发到/listings.php?category=accident%20and%20crash%20repairs

并且 URI/listings.php?category=accident%20and%20crash%20repairs将在外部重定向到/listings/accident-and-crash-repairs.

一旦您验证它的工作更改R=302R=301.

于 2012-05-18T14:52:10.127 回答