我的.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
我一直在和他们一起玩耍,并且他们基本上相互抵消了-关于如何使它们都能正常工作的任何想法?
谢谢
答案 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