我的mod-rewrite改变url是行不通的

时间:2011-04-14 11:04:07

标签: php .htaccess mod-rewrite

我想将my.example.com/newsletter.php或example.com/newsletter.php替换为example.com/newsletter /

我试过了:

RewriteEngine On
RewriteRule ^([a-z]+)$ /$1.php [L]

如果我想要http://example.com/communities/index.php?sub_id=1

怎么办?

是一个特定的名称,如http://example.com/communities/Bridlewood/

可能?

3 个答案:

答案 0 :(得分:1)

其他答案对于领先的斜杠是正确的,你应该注意到斜杠的可能性(记住'$'标志着一个字符串的结束。

尝试这样的事情:

RewriteBase /

RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{SCRIPT_FILENAME} !-d

RewriteRule ^([a-z-]+)/?$ /$1.php [QSA,NC,L]

注意:QSA标志代表“查询字符串追加”,并将任何网址查询传递到相关页面。

HTH

编辑:对于包含小写字母以外的字符的URL,您应该更改范围组,使用不区分大小写的开关或根据其他人的示例使用(.*)

答案 1 :(得分:0)

您需要检查所请求的内容是否确实存在,否则您将遇到各种麻烦!试试这个:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$  /$1.php

至于你要问的第二件事,你显然需要在你的PHP代码中有一个查找功能来获取你所追求的项目的id。确保您实际上没有/communities目录。

文档中有很多帮助:http://httpd.apache.org/docs/2.0/misc/rewriteguide.html

答案 2 :(得分:0)

请在此处查看我的回答:Rewrite all virtual subdomains to same folder using htaccess与您在此处尝试的内容非常相似。