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重写规则有什么问题?
答案 0 :(得分: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]
它进行了两次重写:
x/y
在内部重写为x.php?section=y
x?section=y
的请求被重定向到x/y
请注意,一个是内部重写,而另一个重定向浏览器以显示不那么“丑陋”的网址。
一个提示:如果您可以使用apaches重写模块(RewriteLog
和RewriteLogLevel
)的日志记录功能,这将为您提供有关重写过程中实际内容的大量详细信息。