0

Mod Rewrite noob 所以请原谅我的无知,但我想做的只是一个简单的查询字符串删除

从:http://yourwebsite.com/x?section=y

至:http://yourwebsite.com/x/y

我在我的.htaccess中添加我的 mod 重写规则,如下所示:

ErrorDocument 404 /404

Options +MultiViews
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php

RewriteCond %{QUERY_STRING} ^section=(.*)$ [NC]
RewriteRule ^(.*)$ /$1/%1? [R=301,L,NE]

问题是在访问时:

http://yourwebsite.com/x?section=y

我的规则将其写回:

http://yourwebsite.com/x.php/y

漂亮网址中的.php非常丑陋,我正在努力摆脱它。

我的 mod 重写规则有什么问题?

4

1 回答 1

1

您很可能正在寻找这样的东西:

RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-d  
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.+)\/(.+)$ /$1.php?section=$2 [L]

RewriteCond %{QUERY_STRING} ^section=(.*)$ [NC]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ /$1/%1 [R=301,L,NE]

它进行了两次重写:

  1. 请求x/y在内部重写为x.php?section=y
  2. 一个请求x?section=y被重定向到x/y

请注意,一个是内部重写,而另一个重定向浏览器以显示一个不那么“丑陋”的 url。

一个提示:如果您可以使用 apaches 重写模块 (RewriteLogRewriteLogLevel) 的日志记录功能,这将为您提供有关重写过程中实际发生的事情的大量详细信息。

于 2012-10-21T06:44:45.283 回答