0

我想在我的 .htacces 文件中重写这些:

/*.php -> /*(/)

(例如,gallery.php 到 /gallery 或 /gallery/)

/snippets.php*?s= -> /snippets/*

(例如,snippets.php*?s=test 到 /snippets/test 或 /snippets/test/)

到目前为止我的代码:

RewriteEngine on  
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ $1.php [L]
RewriteRule ^snippets/([^/\.]+)/?$ snippets.php?s=$1 [L]

使用我的代码出现的错误:

/snippets/ 和 /snippets/test(/) 将警告 500 错误。/snippets 工作正常。

我究竟做错了什么?

4

2 回答 2

2

就像 Micheal 所说,您需要更改顺序,但是 Michael 没有移动 RewriteCond,这导致了意外行为。

RewriteEngine on  
RewriteBase /

RewriteRule ^snippets/([^/.]+)/?$ snippets.php?s=$1 [L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.+)$ $1.php [L]

我在我的测试服务器上验证了这个代码,只是为了确定。

于 2012-07-07T21:21:48.423 回答
0

你几乎有这个正确的。要对 采取具体行动/snippets,它需要出现在包罗万象的规则之前。否则,第一条规则匹配和路由snippets/test.php不存在。

RewriteEngine on  
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

# Match snippets first...
RewriteRule ^snippets/([^/.]+)/?$ snippets.php?s=$1 [L]

# Then the catch-all for remaining matches
RewriteRule ^(.*)$ $1.php [L]
于 2012-07-07T21:00:38.870 回答