0

当我有这个时,下面的 modrewrite 工作,这正是我想要的:“www.mysite.com/files/person/john.html”files.php?q=person

Options +FollowSymLinks
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/(.*) /$1.php?q=$2 [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*) /files.php?q=$1 [L]
AddHandler application/x-httpd-php5 .html .htm .txt .php

我遇到的问题是当我有分页并且我有不止一个人要这样显示:“www.mysite.com/person/2”这变成了person.php,但是没有person.php,modrewrite应该只看看下面的这种情况:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*) /files.php?q=$1 [L]

问题是当我只有这个 modrewrite 时,这个“www.mysite.com/person/2”有效:

Options +FollowSymLinks 
RewriteEngine On
#RewriteCond %{REQUEST_FILENAME} !-f
#RewriteCond %{REQUEST_FILENAME} !-d
#RewriteRule ^(.*)/(.*) /$1.php?q=$2 [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*) /files.php?q=$1 [L]
AddHandler application/x-httpd-php5 .html .htm .txt .php

但是,在我取消注释的那一刻,它就停止工作了?怎么办,有什么想法吗?

4

1 回答 1

0

您可以为此使用正则表达式。

DirectoryIndex index.php

<IfModule mod_rewrite.c>
Options +FollowSymLinks

RewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/([a-zA-Z]+)(.html)?$ /$1.php?q=$2 [L]
RewriteRule ^(.*)/([0-9]+)$ /files.php?q=$1&p=$2 [L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*) /files.php?q=$1 [L]

</IfModule>

正则表达式的解释

()       : means group and match that
[a-zA-Z] : means only letters lower or upper
.html    : means match ".html"
?        : means 0 or more times
[0-9]    : means only numbers 0 to 9
+        : means at least 1 or more times
于 2013-05-22T17:42:17.497 回答