简单的URL Mod_rewrite

时间:2010-10-06 15:10:22

标签: apache .htaccess mod-rewrite

为什么以下htaccess文件在调用此URL时会产生300错误?


网址:hxxp://subdomain.domainame.com/keyworda/

IndexIgnore *

RewriteEngine on
RewriteRule ^([a-z]+)/$ /index.php?p=$1


错误日志: 300 hxxp://subdomain.domainame.com/keyworda(没有尾随斜杠)

3 个答案:

答案 0 :(得分:1)

编辑,我试图保持我的答案简短,我不是故意要你准确添加这一行。这只是为了显示丢失的斜线应该去哪里。

RewriteRule ^/([a-z]+)/$ /index.php?p=

我假设您正在apache config目录中编辑.conf文件。 Chigley的答案是假设您正在编辑每个目录的.htaccess配置文件。

编辑您的conf文件,如下所示:

<IfModule mod_rewrite.c>
  RewriteEngine On
  RewriteCond %{REQUEST_METHOD} ^TRACE
  RewriteRule .* - [F]
  RewriteRule ^/(test[a-z]+)/$ /index.php?id=$1 [L,R=301]
  ... your current stuff afterwords ...
</IfModule>
  • 我认为问题是你需要在yoru RewriteRule中使用初始'/'。
  • 首先放置我的测试RewriteRule将确保它是匹配的。
  • 我添加了“test”前缀,因此该行不会干扰您网站的其余部分。这样可以更容易地隔离此规则。因此,在测试时,除了有一个或多个a-z之外,url必须以“/”结尾并以“test”开头才能匹配。
  • 要测试的网址是:hxxp://...yourserver.../testkeyword/
  • 这应该会将浏览器中的网址更改为:hxxp://...yourserver.../index.php?id = testkeyword
  • 您看到的404错误可能意味着:1)没有规则匹配,并且没有与您的关键字匹配的文件。 2)一个或多个规则匹配,但生成的URL与您的php文件不匹配。

一旦它正常工作,这就是你在conf文件中使用的真正的RewriteRule:

RewriteRule ^/([a-z]+)/$ /index.php?id=$1 [L,R=301]

如果它不起作用,请编辑您的问题以包含完整代码 阻止和您的httpd版本,如下所示:

# httpd -v
Server version: Apache/1.3.33 (Darwin)
Server built:   Mar 20 2005 15:08:27

可能没关系,但只是想......

这是mod_write documentation。最底层有一些例子。

答案 1 :(得分:0)

你可以尝试一下这个:

RewriteRule ^([^/]+)/?$ /index.php?p=$1

答案 2 :(得分:0)

尝试

RewriteRule ^([a-z]+)/?$ /index.php?p=$1 [L]