.htaccess ReWrites互相抵消...有什么想法吗?

时间:2018-08-26 20:28:09

标签: php .htaccess url url-rewriting

我的.htaccess文件中有一些规则,以使URL更加整洁,但是,它们似乎相互抵消了。

第一个规则只是从页面名称中删除。 php

示例:func photoOutput(AVCapturePhotoOutput, didFinishProcessingPhoto: AVCapturePhoto, error: Error?)而不是mysite.com/join

mysite.com/join.php

第二条规则是使用户更容易在我的网站上共享其个人资料,

示例:RewriteEngine On Rewrite Condition : %{REQUEST_FILENAME} !-f RewriteRule ^([^\.]+)$ $1.php [NC,L] ,而不是实际的URL mysite.com/user1

mysite.com/profile.php?user=user1

我一直在和他们一起玩耍,并且他们基本上相互抵消了-关于如何使它们都能正常工作的任何想法?

谢谢

1 个答案:

答案 0 :(得分:1)

您遇到的问题是两个条件几乎相同,即^([_A-Z0-9a-z-+]+)$也会匹配^([^.]+)$匹配的任何内容,因此访问mysite.com/user1的用户将被重定向到{{1} },因为这是遇到的第一个规则,并且具有mysite.com/user1.php标志以防止处理更多规则。为了防止这种情况的发生,您需要将规则设置为不同的也许要求用户页面为L?然后,您可以将规则写为

mysite.com/users/user1

请注意,您需要在第一个规则中不匹配的字符上添加RewriteRule ^([^./]+)$ $1.php [NC,L] RewriteRule ^users/([_A-Z0-9a-z-+]+)$ profile.php?user=$1 [S=1] ,否则仍将匹配/

修改

其他两种选择:

如果您希望使用mysite.com/users/user1之类的网址进行操作(例如加入),则可以将用户保持在最高级别,例如

mysite.com/action/join

或者,如果您知道所有动作的名称,则可以将它们交替显示(这将要求您不能拥有一个名为RewriteRule ^action/([^.]+)$ $1.php [NC,L] RewriteRule ^([_A-Z0-9a-z-+]+)$ profile.php?user=$1 [S=1] 的用户):

join