如何在.htaccess中使用rewriterules来更改url?

时间:2011-10-14 03:26:37

标签: .htaccess url mod-rewrite parameters

我正在使用这个重写:

RewriteRule ^page/([^/]*)$ http://example.com/page?q=$1 [QSA,L]

如果我转到example.com/page/somePage,我会被重定向到example.com/page?q=somePage

但我不想重定向,我想要的是始终为example.com/page/somePage的网址

怎么做?
谢谢


我删除了http://example.com但它不起作用,我找不到Page。


我在我的网站上使用Wordpress,这是我完整的.htaccess:


    RewriteEngine On
RewriteBase /
RewriteRule ^page/([^/]+)/?$ page?q=$1 [L]

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

# END WordPress

1 个答案:

答案 0 :(得分:1)

每当您在要重写的路径的开头指定http://时,Apache将始终强制301重定向到新URL,无论该URL是否在同一网站上或不。只需删除http://example.com部分就可以解决您的问题。


至于未找到的页面,是否有另一个RewriteRule告诉“page”将被处理为“page.php”或类似的东西?你是否保存了没有扩展名的PHP文件?


那么你的问题是你肯定需要删除[L]标志,因为你告诉Apache不再处理该请求的RewriteRules,因此它永远不会查看WordPress重写,因为该规则已经执行并且Apache被告知应该是最终规则。我建议将[QSA]留在行中,这不会影响脚本的整体结果。